getenv_s, _wgetenv_s

Geçerli ortamdan bir değer alır. 'nin getenv_wgetenvbu sürümleri, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmelerine sahiptir.

Önemli

Bu API, Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz. Daha fazla bilgi için bkz. Evrensel Windows Platformu uygulamalarında desteklenmeyen CRT işlevleri.

Sözdizimi

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 boyutu veya değişken bulunamazsa 0.

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

numberOfElements
boyutu buffer.

varname
Ortam değişkeni adı.

Dönüş değeri

Başarılı olursa sıfır; aksi takdirde, hata durumunda bir hata kodu.

Hata koşulları

pReturnValue buffer numberOfElements varname İade 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şullarından herhangi biri, Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre işleyicisi çağırır. Yürütmenin devam etmesi için izin verilirse, işlevleri olarak EINVAL ayarlanır errno ve döndürürEINVAL.

Ayrıca, arabellek çok küçükse, bu işlevler döndürür ERANGE. Geçersiz bir parametre işleyicisi çağırmaz. gerekli arabellek boyutunu içinde pReturnValueyazar ve böylece programların işlevi daha büyük bir arabellekle yeniden çağırmasına olanak tanır.

Açıklamalar

işlevi, getenv_s ortam değişkenleri listesinde öğesini arar varname. getenv_s , Windows işletim sisteminde büyük/küçük harfe duyarlı değildir. getenv_s ve _putenv_s ortama erişmek için genel değişkenin _environ işaret ettiği ortamın kopyasını kullanın. getenv_s yalnızca çalışma zamanı kitaplığının erişebildiği veri yapılarında çalışır ve işletim sistemi tarafından işlem için oluşturulan "segment" ortamı üzerinde çalışmaz. Bu nedenle, bağımsız değişkenini envpmain kullanan veya wmain geçersiz bilgileri alabilen programlar.

_wgetenv_s , öğesinin getenv_sgeniş karakterli bir sürümüdür; bağımsız değişkeni ve dönüş değeri _wgetenv_s geniş karakterli dizelerdir. Genel _wenviron değişken, geniş karakterli bir sürümüdür _environ.

Bir MBCS programında (örneğin, bir SBCS ASCII programında), _wenvironNULL başlangıçta ortamın çok baytlı karakter dizelerinden oluşmasıdır. Ardından, ilk çağrısında _wputenvveya ilk çağrısında _wgetenv_s, bir (MBCS) ortamı zaten varsa, buna karşılık gelen bir geniş karakterli dize ortamı oluşturulur ve ardından tarafından _wenvironişaret edilir.

Benzer şekilde, bir Unicode (_wmain) programında _environNULL , başlangıçta ortamın geniş karakter dizelerinden oluşmasıdır. Ardından, ilk çağrısında _putenvveya bir (Unicode) ortamı zaten varsa ilk çağrısında getenv_s , ilgili MBCS ortamı oluşturulur ve ardından tarafından _environişaret edilir.

Bir programda ortamın iki kopyası (MBCS ve Unicode) aynı anda mevcut olduğunda, çalışma zamanı sisteminin her iki kopyada da tain olması gerektiğinden mainyürütme daha uzun sürebilir. Örneğin, çağırdığınızda _putenv, iki ortam dizesinin karşılık gelen bir çağrısı _wputenv da otomatik olarak yürütülür.

Dikkat

Nadir durumlarda, çalışma zamanı sistemi mainortamın hem Unicode sürümünü hem de çok baytlı sürümünü eklerken, iki ortam sürümü tam olarak karşılık gelmeyebilir. Bunun nedeni, herhangi bir benzersiz çok baytlı karakter dizesi benzersiz bir Unicode dizesiyle eşlese de, benzersiz bir Unicode dizesinden çok baytlı karakterli bir dizeye eşlemenin benzersiz olması gerekmemesidir. Daha fazla bilgi için bkz. _environ, _wenviron.

Dekont

_putenv_s ve _getenv_s işlev aileleri iş parçacığı açısından güvenli değildir. _getenv_s dizeyi değiştirirken _putenv_s bir dize işaretçisi döndürebilir ve böylece rastgele hatalara neden olabilir. Bu işlevlere yapılan çağrıların eşitlenmiş olduğundan emin olun.

C++ dilinde bu işlevlerin kullanımı şablon aşırı yüklemeleri ile basitleştirilir; aşırı yüklemeler arabellek uzunluğunu otomatik olarak çıkarsar ve böylece bir boyut bağımsız değişkeni belirtme gereksinimini ortadan kaldırır. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Genel metin yordamı eşlemeleri

TCHAR.H Rutin _UNICODE ve _MBCS tanımlanmadı _MBCS Tanımlanan _UNICODE Tanımlanan
_tgetenv_s getenv_s getenv_s _wgetenv_s

Ortam değişkeninin TZ değerini denetlemek veya değiştirmek için, gerektiği gibi , _putenvve _tzsetkullanıngetenv_s. hakkında TZdaha fazla bilgi için, bkz. _tzset ve_daylight , _dstbias, _timezoneve _tzname.

Gereksinimler

Yordam Gerekli başlık
getenv_s <stdlib.h>
_wgetenv_s <stdlib.h> veya <wchar.h>

Daha fazla uyumluluk bilgisi 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);
}
Original LIB variable is: c:\vctools\lib;c:\vctools\atlmfc\lib;c:\vctools\PlatformSDK\lib;c:\vctools\Visual Studio SDKs\DIA Sdk\lib;c:\vctools\Visual Studio SDKs\BSC Sdk\lib
New LIB variable is: c:\mylib;c:\yourlib

Ayrıca bkz.

İşlem ve ortam denetimi
Ortam sabitleri
_putenv, _wputenv
_dupenv_s, _wdupenv_s