#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\n"), pszVariableName, pszValue);
free(pszValue);
}
else {
_tprintf(TEXT("'%s'=<unknown value>\n"), 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\r\n"),current,pCurrent);
current++;
pElement++;
}
}
}
void myDumpEnvVariables0(PTSTR pEnvBlock[]) //自己改写的版本,避免了循环中的if判断
{
int current=0;
PTSTR *pElement=pEnvBlock;
PTSTR pCurrent=NULL;
pCurrent=*pElement; //先赋值一次
_tprintf(TEXT("\r\n getEnv by myDumpEnvVariables0\r\n"));
while(pCurrent!=NULL) //用pCurrent作为循环判断的变量
{
_tprintf(TEXT("[%u] %s\r\n"),current,pCurrent);
pElement++;
current++;
pCurrent=*pElement;
}
}
void myDumpEnvVariables1(PTSTR pEnvBlock[])//自己改写的版本,使程序更简洁,更易理解
{
int current=0;
PTSTR *pElement=pEnvBlock;
_tprintf(TEXT("\r\n getEnv by myDumpEnvVariables1\r\n"));
while(*pElement!=NULL) //用pCurrent作为循环判断的变量
{
_tprintf(TEXT("[%u] %s\r\n"),current,*pElement);
pElement++;
current++;
}
}