为什么以下程序在运行时给出了分段错误?
#include <stdio.h>
#include <string.h>
#include <malloc.h>
main()
{
char * str = "Have a. nice, day :)";
char * ptr;
ptr = strtok( str, " .,");
printf("%s",ptr);
}
但如果我使用char str [] =“有一个。很好,一天:)”;它给了我输出。为什么我得到错误,即使strtok定义是char * strcpy(char *,const char *)???〜
答案 0 :(得分:4)
strtok
修改参数,str
指向字符串文字,修改字符串文字导致未定义的行为。实际上不推荐使用字符串文字初始化非const char*
。
当您编写str[]
时,str
将成为使用字符串初始化的可变数组。
答案 1 :(得分:0)
strtok修改传递给它的字符串。我怀疑它与char * =“literal string”有关,它给你一个指向.data部分中字符串的指针,而char [] =“literal string”在堆栈上分配一个缓冲区,并复制初始内容来自.data部分。