我正在使用一个简单的程序来使用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作为第一个参数应该工作
char *str = "foo"给你一个指向字符串文字的指针(你应该真的这样做const char *,但是C允许非const向后兼容的原因).
尝试修改字符串文字是未定义的行为. strtok修改其输入.
您无法修改字符串文字.关于这个问题的c faq解释得最好.简而言之,如果你宣布
char *stuff = "Read-only stuff";
Run Code Online (Sandbox Code Playgroud)
你无法修改它.
strtok接受a char *的事实与您无法将数组传递给函数的事实有关,您只能传递地址.另一个c faq条目可能会有所帮助.