1

可能重复:
为什么在写入字符串时会出现分段错误?

我想替换字符串中的一个单词。这是代码

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)

这给出了分段错误。

在第一个示例中,“文本”是一个数组,数据只是复制到该位置。在第二个“文本”是一个指针。什么是问题?

4

2 回答 2

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) 中实际上未定义的行为中所做的事情。

于 2012-09-14T05:49:39.240 回答
1

问题是第二个示例中的字符串是字符串文字,它必须保持不变。当您尝试在该字符串上写入时,您正在写入只读内存,这(取决于操作系统)是不允许的。

于 2012-09-14T05:48:11.627 回答