使用strcpy()获取char *的部分会导致程序崩溃
||
我试图从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;
}
没有找到相关结果
已邀请:
3 个回复
艾食魄轻县
最好的方法是使用
。例如
在旁注中,遇到以下情况时,应从函数中将“ 4”(或作为错误处理):
呕蹿尉
)转换为
。
被声明为
,但是我看不到您为其分配了任何内存,或以其他方式为
分配了一个值。 结果,“ 7”包含一个随机的存储器地址,并且您正在将“ 12”的一部分复制到未知的存储器中,从而导致崩溃。 要解决此问题,应在调用
之前使用
向
分配一些内存。 编辑:您最近的更改后,您的代码现在有:
然后:
的第二个声明仍未初始化,并隐藏(阴影)第一个声明。因此,您根本没有解决问题。 当我建议使用
分配内存时,这就是我在说的:
请注意,无论何时分配内存,例如使用
,都必须准备好在完成后释放它。否则您的程序将发生内存泄漏。
闯舱酮
您需要动态地为此分配内存或将其设置为堆栈上的数组,然后再将任何数据复制到其中。这些只是指针,它们没有任何内存可以选择将任何数据输入。 要将char *转换为要添加到地图的字符串,请使用:
编辑:理想情况下,您应该使用
来管理您的字符串,而不必担心动态分配或事先不知道字符串的最大大小的麻烦。
这样,您就不必再为大小烦恼了,向量本身会自动增长到大小。