C Strtok Segfaulting

时间:2012-11-27 20:39:01

标签: c segmentation-fault strtok

我不确定为什么以下代码是segfaulting:

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

由于没有任何遗留给tokenate,tempString是否只等于NULL?感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:7)

有两个问题:

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

char buffer[] = "SIZE";

其次,strcmp无法处理NULL可以返回的strtok

if (NULL != tempString && strcmp(tempString, "SIZE") == 0)

答案 1 :(得分:2)

只需将标记化的元素作为the reference says进行检查,如果您遵循它,就会采用干净的方法。

正确代码:

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

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