getenv_s
, _wgetenv_s
Geçerli ortamdan bir değer alır. 'nin getenv
_wgetenv
bu 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 |
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ş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 pReturnValue
yazar 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 envp
main
kullanan veya wmain
geçersiz bilgileri alabilen programlar.
_wgetenv_s
, öğesinin getenv_s
geniş 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), _wenviron
NULL
başlangıçta ortamın çok baytlı karakter dizelerinden oluşmasıdır. Ardından, ilk çağrısında _wputenv
veya 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 _wenviron
işaret edilir.
Benzer şekilde, bir Unicode (_wmain
) programında _environ
NULL
, başlangıçta ortamın geniş karakter dizelerinden oluşmasıdır. Ardından, ilk çağrısında _putenv
veya bir (Unicode) ortamı zaten varsa ilk çağrısında getenv_s
, ilgili MBCS ortamı oluşturulur ve ardından tarafından _environ
işaret edilir.
Bir programda ortamın iki kopyası (MBCS ve Unicode) aynı anda mevcut olduğunda, çalışma zamanı sisteminin her iki kopyayı da tutması gerektiğinden yü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 ortamın hem Unicode sürümünü hem de çok baytlı sürümünü korurken, 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
.
Not
_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 olağan |
_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 , _putenv
ve _tzset
kullanıngetenv_s
. hakkında TZ
daha fazla bilgi için, bkz. _tzset
ve_daylight
, _dstbias
, _timezone
ve _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