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部分。