我不确定为什么以下代码会出错:
char * buffer = "SIZE";
char * tempString;
tempString = strtok(buffer, " ");
if(strcmp(tempString, "SIZE") == 0){
tempString = strtok(NULL, " "); <----Faulting here
}
既然没有什么可以标记的了,tempString 不应该等于 NULL 吗?提前感谢您的任何帮助。
有两个问题:
首先,strtok
需要第一个参数的可修改字符串,而示例中buffer
则不需要。 试试这个:
char buffer[] = "SIZE";
其次,strcmp
不处理strtok
可以返回NULL
:
if (NULL != tempString && strcmp(tempString, "SIZE") == 0)
只需按照参考资料所述查看标记化元素,如果您遵循它,您将拥有一种干净的方法。
正确的代码:
char buffer[] = "SIZE";
char * tok;
tok = strtok(buffer, " ");
while(tok != NULL)
{
if(strcmp(tok, "SIZE") != 0)
break;
tok = strtok(NULL, " "); // <----Faulted here
}
是的,它可能会跳过缓冲区中的多个"SIZE"单词,因此它比您最初所做的要多一些,但对于其他程序员来说更容易阅读(并且以后更容易回忆起它,对您来说也是如此)。