可能重复:
Why do I get a segmentation fault when writing to a string?
我想替换字符串中的单词。这是代码
char text[] = "This is a list of lists";
char *find = "list";
char* pos = NULL;
pos = strstr(text,find);
strncpy(pos,"test",4)
这很好但是
char *text = "This is a list of lists";
char *find = "list";
char* pos = NULL;
pos = strstr(text,find);
strncpy(pos,"test",4)
这会产生分段错误。
在第一个示例中,“text”是一个数组,数据只是在该位置复制。在第二个中,“text”是一个指针。什么问题?
答案 0 :(得分:3)
之间的区别
char text[] = "This is a list of lists"; // 1
和
char *text = "This is a list of lists"; // 2
是,在(1)中,text
是一个非常数字符数组;在(2)中,text
指向字符串文字,字符串文字是常量。你不能修改你正在尝试的常量对象(2)。你在(2)实际上未定义的行为中做了什么。
答案 1 :(得分:1)
问题是第二个例子中的字符串是字符串文字,必须保持不变。当您尝试写入该字符串时,您正在写入只读内存,这是不允许的(取决于操作系统)。