0

我不确定为什么以下代码会出现段错误:

char * buffer = "SIZE";
char * tempString;
tempString = strtok(buffer, " ");
if(strcmp(tempString, "SIZE") == 0){    
    tempString = strtok(NULL, " ");           <----Faulting here
}

由于没有任何东西可以标记,tempString 不应该等于 NULL 吗?感谢您提前提供任何帮助。

4

2 回答 2

7

有两个问题:

首先,strtok第一个参数需要一个可修改的字符串,而buffer在您的示例中不是。试试这个:

char buffer[] = "SIZE";

其次,strcmp不处理NULL哪个strtok可以返回:

if (NULL != tempString && strcmp(tempString, "SIZE") == 0)
于 2012-11-27T20:43:12.177 回答
2

只需按照参考文献所述检查标记化的元素,如果您遵循它,您就有了一个干净的方法。

正确代码:

char buffer[] = "SIZE";
char * tok;
tok = strtok(buffer, " ");
while(tok != NULL)
{
  if(strcmp(tok, "SIZE") != 0)    
    break;
  tok = strtok(NULL, " ");        //   <----Faulted here
}

是的,它可能会跳过缓冲区中的多个“SIZE”字,所以它比你最初做的要多一点,但是对于其他程序员来说更容易阅读(以后也更容易回忆起它)。

于 2012-11-27T21:56:40.773 回答