将char *拆分为许多\'\\\\ 0\'字符
||
以下是C ++。
我有一个包含环境变量的字符串,我需要在每个变量的声明处将其拆分并将其存储在字符串中:
char* envVars = \"=::=::\\0system=blah\\0othervar=blah\\0\"
因此,我使用cstring函数在出现空终止符char \'\\ 0 \'时拆分字符串,但它正陷入无限循环。为什么?
找到的解决方案:查看代码注释:
vector <string> GetEvironmentVariables()
{
vector <string> envVariables;
char* environVar = GetEnvironmentStrings();
char* pos = strchr( environVar, \'\\0\' );
// As far as I know environVar =::=::\\0environVar1=...\\0environVar2=...\\0\"
// so the string has many NULL terminators
while ( pos != NULL )
{
char* buffer;
strncpy( buffer, environVar, strlen(pos) ); // on the 1st iteration: buffer SHOULD = \"=::=::\\0\", 2nd buffer SHOULD = \"environVar=...\\0\"
envVariables.push_back( string(buffer) );
environVar = pos; // SOLUTUION: I need to move over the \'\\0\' pos points to so: environVar = ++pos;
pos = strchr( environVar, \'\\0\' );
printf(\"Var: %s \\n\", envVariables.back().c_str() );
printf(\"env: %s \\n\", environVar);
system(\"PAUSE\");
// prints out this:
// Var: cRek (same junk each iteration)
// env:
// Press any key to continue....
}
FreeEnvironmentStrings( environVar );
return envVariables;
}
没有找到相关结果
已邀请:
4 个回复
脖呐
是
,函数将定位终止
。 当然,
的结果是
和
。因此,您始终复制完全为零的字符。没用。 您还可以设置
,而不会跳过NUL字符。因此,下一个对
的调用将返回
,并且再也没有取得任何进展。 您还忘记了初始化
,而是将通配指针传递给
,这将破坏内存的随机部分。一旦修复了length参数始终为零的事实,此错误可能会抬起头来。
臀夯脖锑
这里使用的
构造函数从指向数组中获取字符,直到到达reaches15ѭ。然后,我们移至下一个字符串,该字符串从前一个字符串的末尾开始一个字符。当到达\“ empty \”字符串(终止序列的双null终止符)时,它停止。
降女陷费券
pos位于第一个空值处,长度为零。您可能需要strlen(environVar)。 这行可能导致无限循环:
由于pos位于\\ 0,它将返回相同的指针。尝试pos + 1。
师埠女