控制台获取、更改环境变量
#include <windows.h> #include <stdio.h> #include <tchar.h> void DumpEnvVariables(PTSTR pEnvBlock[]); void myDumpEnvVariables0(PTSTR pEnvBlock[]); void myDumpEnvVariables1(PTSTR pEnvBlock[]); void PrintEnvironmentVariable(PCTSTR pszVariableName); int _tmain(int argc,TCHAR *argv[],TCHAR *envp[]) { DumpEnvVariables(envp); //myDumpEnvVariables0(envp); //myDumpEnvVariables1(envp); PrintEnvironmentVariable(L"TEMP"); int i; scanf("jjjj",&i); return 0; } void PrintEnvironmentVariable(PCTSTR pszVariableName) { PTSTR pszValue = NULL; // Get the size of the buffer that is required to store the value DWORD dwResult = GetEnvironmentVariable(pszVariableName, pszValue, 0); if (dwResult != 0) { // Allocate the buffer to store the environment variable value DWORD size = dwResult * sizeof(TCHAR); pszValue = (PTSTR)malloc(size); GetEnvironmentVariable(pszVariableName, pszValue, size); _tprintf(TEXT("%s=%s "), pszVariableName, pszValue); free(pszValue); } else {
_tprintf(TEXT("%s=<unknown value> "), pszVariableName); } } void DumpEnvVariables(PTSTR pEnvBlock[]) { int current =0; PTSTR *pElement=pEnvBlock; PTSTR pCurrent=NULL; //初始化为NULL,避免成为野指针 while(pElement!=NULL) { pCurrent=(PTSTR)(*pElement); if (pCurrent==NULL) //如果是最后一项,则将pElement赋值为NULL,使循环退出 { pElement=NULL; //循环退出的条件 } else { _tprintf(TEXT("[%u] %s "),current,pCurrent); current++; pElement++; }
} } void myDumpEnvVariables0(PTSTR pEnvBlock[]) //自己改写的版本,避免了循环中的if判断 { int current=0; PTSTR *pElement=pEnvBlock; PTSTR pCurrent=NULL; pCurrent=*pElement; //先赋值一次
_tprintf(TEXT(" getEnv by myDumpEnvVariables0 ")); while(pCurrent!=NULL) //用pCurrent作为循环判断的变量 {
_tprintf(TEXT("[%u] %s "),current,pCurrent); pElement++; current++; pCurrent=*pElement; } } void myDumpEnvVariables1(PTSTR pEnvBlock[])//自己改写的版本,使程序更简洁,更易理解 { int current=0; PTSTR *pElement=pEnvBlock;
_tprintf(TEXT(" getEnv by myDumpEnvVariables1 ")); while(*pElement!=NULL) //用pCurrent作为循环判断的变量 {
_tprintf(TEXT("[%u] %s "),current,*pElement); pElement++; current++;
}
}
