C中的strtok函数出错

use*_*934 4 c string strtok

我正在使用一个简单的程序来使用strtok函数对字符串进行标记.这是代码 -

# include <stdio.h>
char str[] = "now # time for all # good men to # aid of their country";   //line a
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
    printf( "result is \"%s\"\n", result );
    result = strtok( NULL, delims );
}
Run Code Online (Sandbox Code Playgroud)

该程序成功运行.但是,如果将行a更改为

char * str= "now # time for all # good men to # aid of their country";   //line a 
Run Code Online (Sandbox Code Playgroud)

strtok函数提供核心转储.我想得到一个解释,我理解为什么会这样?因为从strtok的声明为--char*strtok(char*str1,const char*str2); char*str作为第一个参数应该工作

Oli*_*rth 6

char *str = "foo"给你一个指向字符串文字的指针(你应该真的这样做const char *,但是C允许非const向后兼容的原因).

尝试修改字符串文字是未定义的行为. strtok修改其输入.


cni*_*tar 5

您无法修改字符串文字.关于这个问题的c faq解释得最好.简而言之,如果你宣布

char *stuff = "Read-only stuff";
Run Code Online (Sandbox Code Playgroud)

你无法修改它.

strtok接受a char *的事实与您无法将数组传递给函数的事实有关,您只能传递地址.另一个c faq条目可能会有所帮助.