输出进程相关联的环境变量信息(使用GetEnvironmentStrings取得信息,然后使用StringCchCopyN和StringCchPrintf保证字符串不会越界)

[cpp] view plain copy
 
  1. void DumpEnvironmentStrings()  
  2. {  
  3. #define MAX_ENVIRONMENT_NAME_LENGTH     (128)  
  4. #define MAX_ENVIRONMENT_VALUE_LENGTH    (1024)  
  5.     LPTSTR lpszEnvString = GetEnvironmentStrings();  
  6.     if(NULL == lpszEnvString)  
  7.     {  
  8.         return ;  
  9.     }  
  10.   
  11.     TCHAR* pEnvBlock = lpszEnvString;  
  12.     const TCHAR szToken = _T('=');  
  13.     TCHAR szName[MAX_ENVIRONMENT_NAME_LENGTH] = {0};  
  14.     TCHAR szValue[MAX_ENVIRONMENT_VALUE_LENGTH] = {0};  
  15.     while('' != *pEnvBlock)  
  16.     {  
  17.         if(szToken == *pEnvBlock)  
  18.         {  
  19.             pEnvBlock += _tcslen(pEnvBlock) + 1;  
  20.             continue;  
  21.         }  
  22.         TCHAR* pToken = _tcschr(pEnvBlock, szToken);  
  23.         if(NULL == pToken)  
  24.         {  
  25.             break;  
  26.         }  
  27.         memset(szName, 0, sizeof(szName));  
  28.         memset(szValue, 0, sizeof(szValue));  
  29.         StringCchCopyN(szName, _countof(szName), pEnvBlock, pToken - pEnvBlock);  
  30.         StringCchPrintf(szValue, _countof(szValue), _T("%s"), pToken + 1);  
  31.         _tprintf(_T("%s : %s "), szName, szValue);  
  32.         pEnvBlock += _tcslen(pEnvBlock) + 1;  
  33.     }  
  34.     FreeEnvironmentStrings(lpszEnvString);  
  35.     lpszEnvString = NULL;  
  36. }  
  37.   
  38. // 测试代码  
  39. #include "stdafx.h"  
  40. #include <Windows.h>  
  41. #include <strsafe.h>  
  42.   
  43. int _tmain(int argc, _TCHAR* argv[])  
  44. {  
  45.     DumpEnvironmentStrings();  
  46.     return 0;  
  47. }  
 
 http://blog.csdn.net/visualeleven/article/details/8122081
原文地址:https://www.cnblogs.com/findumars/p/6002320.html