strtok中的分段错误(核心转储)

可能重复:
内存分配char *和char []

为什么以下程序在运行时出现Segmentation错误?

#include  #include  #include  main() { char * str = "Have a. nice, day :)"; char * ptr; ptr = strtok( str, " .,"); printf("%s",ptr); } 

但是,如果我使用char str [] =“有一个。很好,一天:)”; 它给了我输出。 为什么我得到错误,即使strtok定义是char * strcpy(char *,const char *)???〜

strtok修改参数, str指向字符串文字,修改字符串文字会导致未定义的行为。 实际上不推荐使用字符串文字初始化非const char*

当你写str[]str成为用字符串初始化的可变数组。

strtok修改传递给它的字符串。 我怀疑它与char * =“literal string”有关,它给你一个指向.data部分中字符串的指针,而char [] =“literal string”在堆栈上分配一个缓冲区,并复制来自的初始内容.data部分。