我正在为学校开发一个服务器应用程序。目前,我正在尝试打破一个commandLine条目,该条目应该被读入四个单独的const char *。
int state = 0;
char *token = std::strtok(commandLine, " ");
while(token != NULL)
{
switch(state)
{
case 0: c = token; break;
case 1: u = token; break;
case 2: p = token;break;
case 3: a = token; break;
}
token = std::strtok(NULL, " ");
state++;
}
const char* command = c.c_str();
const char* user = u.c_str();
const char* password = p.c_str();
const char* args = a.c_str();
我意识到这不是很好的优化;我一直在尝试很多不同的解决方案,因为我一直在尝试的一切都导致了seg故障。谢谢你的帮助!
答案 0 :(得分:0)
这是一个有趣的问题^ _ ^!我尝试在我的计算机上运行此代码,当我像这样定义commandLine时,我遇到了同样的问题:
char* commandLine = "abc def ghi jkl";
原因是函数strtok会改变字符串commandLine,部分源代码是:
for ( ; *str ; str++ )
if ( map[*str >> 3] & (1 << (*str & 7)) ) {
*str++ = '\0';
break;
}
所以,当我将我的定义改为:
char commandLine[] = "abc def ghi jkl";
问题已经消失了。愿你有用,谢谢〜