getenv_s, _wgetenv_s

Geçerli ortam değeri alır.Bu sürümleri getenv, _wgetenv açıklandığı gibi güvenlik geliştirmeleri, sahip CRT'deki Güvenlik Özellikleri.

Önemli notÖnemli

Bu API yürütün uygulamalarda kullanılamaz Windows Çalışma Zamanı.Daha fazla bilgi için bkz: /zw ile desteklenmeyen crt işlevlerinin.

errno_t getenv_s( 
   size_t *pReturnValue,
   char* buffer,
   size_t numberOfElements,
   const char *varname 
);
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t *buffer,
   size_t numberOfElements,
   const wchar_t *varname 
);
template <size_t size>
errno_t getenv_s( 
   size_t *pReturnValue,
   char (&buffer)[size],
   const char *varname 
); // C++ only
template <size_t size>
errno_t _wgetenv_s( 
   size_t *pReturnValue,
   wchar_t (&buffer)[size],
   const wchar_t *varname 
); // C++ only

Parametreler

  • pReturnValue
    Gerekli arabellek boyutunu veya değişken bulunamazsa, 0.

  • buffer
    Ortam değişkeninin değerini depolamak için arabellek.

  • numberOfElements
    Size of buffer.

  • varname
    Ortam değişkeni adı.

Dönüş Değeri

Sıfır başarılı olursa; Aksi durumda, bir hata kodu hatası durumunda.

Hata koşulları

pReturnValue

buffer

numberOfElements

varname

Dönüş Değeri

NULL

herhangi bir

herhangi bir

herhangi bir

EINVAL

herhangi bir

NULL

> 0

herhangi bir

EINVAL

herhangi bir

herhangi bir

herhangi bir

NULL

EINVAL

Bu hata koşullardan herhangi birine çağıran bir geçersiz parametre işleyicisi açıklandığı gibi Parametre Doğrulama.Set işlevlerinden yürütülmesine devam etmek için izin verilirse, errno için EINVAL ve EINVAL.

Ayrıca, arabellek çok küçük ise, bu işlevler dönmek ERANGE.Geçersiz parametre işleyicisi çağırmak yok.Bunlar gerekli arabellek boyutu dışarı yazma pReturnValueve böylece daha büyük bir arabellek ile yeniden işlevini çağırmak programları etkinleştirme.

Notlar

getenv_s İşlev için ortam değişkenleri listesini arar varname.getenv_sWindows işletim sistemi büyük/küçük harf duyarlı değildir.getenv_sve _putenv_s genel değişkeni tarafından gösterilen ortam kopyasını kullanma _environ ortama erişmek için.getenv_sÇalışma Zamanı Kitaplığı'na erişilebilir veri yapıları ve "işlem için işletim sistemi tarafından oluşturulan kesim" ortam üzerinde çalışır.Bu nedenle, kullanan programlar envp bağımsız değişkeni ana veya wmain geçersiz bilgi almak.

_wgetenv_sgeniş karakter sürümü getenv_s; yazmaç değeri _wgetenv_s geniş karakter dizeleridir._wenviron Genel değişkeni bir geniş karakter sürümü olan _environ.

mbcs programında (örneğin, bir programda sbcs ASCII), _wenviron başlangıçta olan NULL ortamı çok baytlı karakter dizeleri oluşur çünkü.Daha sonra ilk çağrı _wputenv, ya da ilk çağrı _wgetenv_s, bir (mbcs) ortam zaten varsa, karşılık gelen bir geniş karakter dizeli ortam oluşturulur ve sonra tarafından gösterilir _wenviron.

Benzer şekilde, bir Unicode (_wmain) programı, _environ başlangıçta olan NULL ortamı geniş karakter dizeleri oluşur çünkü.Daha sonra ilk çağrı _putenv, ya da ilk çağrı getenv_s (Unicode) ortam zaten varsa, karşılık gelen bir mbcs ortamı oluşturulur ve sonra tarafından gösterilir _environ.

Bir programı aynı anda iki kopyası (mbcs ve Unicode) ortamı var, her iki çalışma zamanı sistemi korumak gerekir ve bu daha yavaş yürütme süresi neden olur.Örneğin, çağırdığınızda _putenv, çağrı _wputenv , böylece iki ortam dizeleri karşılık da otomatik olarak yürütülür.

Uyarı notuUyarı

Çalışma zamanı sistemi hem Unicode sürümü hem de ortam çok baytlı bir sürümünü korurken ender durumlarda iki ortam sürümleri tam olarak karşılık gelmeyebilir.Benzersiz herhangi bir çok baytlı karakter dizesi için benzersiz bir Unicode dize eşlemeleri de benzersiz bir Unicode dize eşleme çok baytlı karakter dizesi benzersiz olmak zorunda değildir çünkü bu durumda olur.Daha fazla bilgi için bkz. _environ, _wenviron.

[!NOT]

_putenv_s Ve _getenv_s işlevlerinin aileleri iş parçacığı açısından güvenli değildir._getenv_sdize işaretçisi hata döndürmesine neden _putenv_s dize değiştirme ve böylece rasgele hatalara neden.Bu işlevlere olan çağrıları eşzamanlı olduğundan emin olun.

C++'da, bu işlevlerini şablon aşırı yükleme tarafından Basitleştirilmiş; aşırı yükleme, arabellek uzunluğu otomatik olarak gerçekleştirip ve böylece size baðýmsýz deðiþkeni belirtmek için gereksinimini ortadan kaldırır.Daha fazla bilgi için bkz. Güvenli Şablon Aşırı Yüklemeleri.

Genel metin eşlemeleri yordamına girildi

TCHAR.H yordamına girildi

_UNICODE & _mbcs tanımlanmamış

Tanımlanan _mbcs

Tanımlanan _UNICODE

_tgetenv_s

getenv_s

getenv_s

_wgetenv_s

Denetlemek veya değerini değiştirmek için TZ ortam değişkeni, kullanım getenv_s, _putenv, ve _tzset, gerektiği gibi.TZ hakkında daha fazla bilgi edinmek için bkz. _tzset and _daylight, _dstbias, _timezone ve _tzname.

Gereksinimler

Yordamı

Gerekli başlık

getenv_s

<stdlib.h>

_wgetenv_s

<stdlib.h> veya <wchar.h>

Ek uyumluluk bilgileri için bkz: Uyumluluk.

Örnek

// crt_getenv_s.c
// This program uses getenv_s to retrieve
// the LIB environment variable and then uses
// _putenv to change it to a new value.
 
#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char* libvar;
   size_t requiredSize;

   getenv_s( &requiredSize, NULL, 0, "LIB");
   if (requiredSize == 0)
   {
      printf("LIB doesn't exist!\n");
      exit(1);
   }

   libvar = (char*) malloc(requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the value of the LIB environment variable.
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "Original LIB variable is: %s\n", libvar );

   // Attempt to change path. Note that this only affects
   // the environment variable of the current process. The command
   // processor's environment is not changed.
   _putenv_s( "LIB", "c:\\mylib;c:\\yourlib" );

   getenv_s( &requiredSize, NULL, 0, "LIB");

   libvar = (char*) realloc(libvar, requiredSize * sizeof(char));
   if (!libvar)
   {
      printf("Failed to allocate memory!\n");
      exit(1);
   }

   // Get the new value of the LIB environment variable. 
   getenv_s( &requiredSize, libvar, requiredSize, "LIB" );

   printf( "New LIB variable is: %s\n", libvar );

   free(libvar);
}
  

.NET Framework Eşdeğeri

System::Environment::GetEnvironmentVariable

Ayrıca bkz.

Başvuru

Süreç ve Ortam Denetimi

Ortam Sabitleri

_putenv, _wputenv

_dupenv_s, _wdupenv_s