C:strncpy引起指针问题

时间:2012-09-14 05:40:29

标签: c pointers strncpy

  

可能重复:
  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”是一个指针。什么问题?

2 个答案:

答案 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)

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