【发布时间】:2011-06-13 04:24:47
【问题描述】:
我正在尝试从 char* 中获取位,然后将其存储在地图中。我使用 strcpy 和 strncpy 来执行此操作,但是当我使用 strncpy 时我的程序崩溃(它可以编译但在运行时崩溃)。
为什么我的程序会崩溃?如何成功地从 char* 中获取位并将它们存储在地图中?
编辑:在听取建议后,我已经初始化了 char*,但它仍然崩溃?
// I did the following
char* variable = "";
char* value = "";
map <string, string> GetEvironmentVariablesEx()
{
map <string, string> envVariables;
char* environVar = GetEnvironmentStrings();
char* pos = strchr( environVar, '\0' );
// This is what environVar contains: environVar = "=::=::\0APPDATA=c:/users/user1/desktop\0OS=windowsNT\0\0"; // note the string is double null terminated
// Skip over the "=::=::\0" of the environVar string
if ( pos != NULL ) { environVar = ++pos; pos = strchr( environVar, '\0' ); }
else return envVariables;
while ( true )
{
char* delim = strchr( environVar, '=' );
char* variable;
char* value;
if ( delim == NULL ) { printf("Environment variable string is badly formatted"); break; }
// The crash occurs at the below line: the crash occurs at runtime
strncpy( variable, environVar, strlen(delim) );
strcpy( value, environVar+strlen(delim) );
printf( "Variable is: %s = %s \n", variable, value );
envVariables.insert( pair<string, string>(string(variable), string(value)) );
environVar = ++pos;
// find the "\0\0" that identifies the end of environVar
if ( pos != NULL && *pos == 0 ) { break; }
pos = strchr( environVar, '\0' );
}
FreeEnvironmentStrings( environVar );
return envVariables;
}
【问题讨论】:
-
为什么你这么坚持使用更难使用的
<cstring>函数而不是C++的std::string函数? -
你认为
strchr(environVar, '\0')会在什么情况下返回NULL?