これの、セキュリティ強化版がgetenv_s関数です。VS2005以降でないと使えません。
stdlib.hをインクルードする必要があります。
errno_t getenv_s( size_t *pReturnValue, char* buffer, size_t sizeInBytes, const char *varname );pReturnValueには、値を読み出すのに必要なバッファサイズを格納する変数へのポインタです。
bufferは、値を格納するバッファです。
sizeInBytesは、bufferのサイズを指定します。
varnameは、環境変数名です。
varnameを指定して、bufferにNULL、sizeofInBytesに0を指定すると、必要なバッファサイズがわかります。
正常に終了したら0が返されます。
では、簡単なサンプルを見てみましょう。
// getenv01.c #include <stdio.h> #include <stdlib.h> int main() { char *lpszBuf; char *lpszEnv[] = { "PATH", "PROMPT", "LIB", "OS", "TEMP", "WINDIR", "LANG" }; size_t returnsize; int i; for (i = 0; i < 7; i++) { getenv_s(&returnsize, NULL, 0, lpszEnv[i]); lpszBuf = (char *)malloc(returnsize * sizeof(char)); if (lpszBuf) { getenv_s(&returnsize, lpszBuf, returnsize, lpszEnv[i]); printf("[%s] %s\n\n", lpszEnv[i], lpszBuf); free(lpszBuf); } else { return -1; } } return 0; }実行結果は、次のようになります。
[PATH] C:\namazu\bin;c:\oracle\ora90\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C :\Perl\bin\;C:\PROGRA~1\JUSTSY~1\JSLIB32;C:\Perl\bin\;C:\WINDOWS\system32;C:\WIN DOWS;C:\WINDOWS\System32\Wbem;C:\kakasi\bin;c:\php;C:\Program Files\Microsoft SQ L Server\90\Tools\binn\;C:\namazu\bin;"";C:\Program Files\Microsoft Visual Studi o 8\;C:\Program Files\Microsoft Visual Studio 8\VC\bin [PROMPT] $P$G [LIB] C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Lib\ [OS] Windows_NT [TEMP] C:\DOCUME~1\user\LOCALS~1\Temp [WINDIR] C:\WINDOWS [LANG] ja_JP.SJIS当然ですが、実行結果は、それぞれのパソコンにより異なります。
Update Mar/01/2008 By Y.Kumei