C Strtok Segfaulting

Nig*_*ain 0 c strtok segmentation-fault

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

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

既然没有遗留任何标记,那么tempString是否应该等于NULL?感谢您提前提供的任何帮助.

Iro*_*san 7

有两个问题:

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

char buffer[] = "SIZE";
Run Code Online (Sandbox Code Playgroud)

二,strcmp不处理NULL哪些strtok可以返回:

if (NULL != tempString && strcmp(tempString, "SIZE") == 0)
Run Code Online (Sandbox Code Playgroud)

  • @HernanVelasquez崩溃没有包括`string.h`?然后代码崩溃将在64位系统上出现(没有原型,`strtok`会被假定为在C89/C90中返回`int`,所以返回的指针将被转换为`int`,因此`tempString`会得到垃圾;默认情况下,许多编译器仍会接受隐式函数声明,即使它们已经在C99中被删除了).它没有与`char*buffer ="SIZE"崩溃;`令人惊讶,但允许,修改字符串文字是UB,不需要崩溃. (4认同)