为什么通过指针传递正确的值会导致段错误?

时间:2019-04-10 11:44:20

标签: c pointers segmentation-fault

我目前正在自学c,在使用指针时,我碰到了这个问题- 我正在尝试将指向的字符串(不是char数组)中的子字符串替换为另一个指向的字符串的子字符串。

char *str1="I like pizza!";
char *str2="love";

    printf("%s\n", str1);

for (int i=2, j=0; j<4; i++, j++) { 
    *(str1+i)=*(str2+j); 
}

    printf("%s\n", str1);

结果应该是-我看到它的方式-输出“我喜欢披萨”,然后输出“我喜欢披萨”。 相反,我遇到了段错误(错误139)。 我在网上搜寻了解决方案,但找不到问题所在。

(至少可以说,for循环并不完美,但这不是问题所在)。 请帮帮我:)

2 个答案:

答案 0 :(得分:0)

因为这些是程序二进制文件中只读部分的指针。您无法更改内容。尝试以下方法:

char str1[] = "I like pizza!";
char str2[] = "love"; // actually, this one can stay as a pointer as we're only reading

现在将字符串复制到堆栈中,程序将按预期工作。

答案 1 :(得分:0)

str1str2指向的字符串是只读的

尝试更改其内容的行为是未定义

使用char str1[] = "I like pizza!";&c。而是将只读字符串复制到str1[],然后您可以随意对其进行修改。