我目前正在自学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循环并不完美,但这不是问题所在)。 请帮帮我:)
答案 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)
str1
和str2
指向的字符串是只读的。
尝试更改其内容的行为是未定义。
使用char str1[] = "I like pizza!";
&c。而是将只读字符串复制到str1[]
,然后您可以随意对其进行修改。