我目前正在自学c,在练习指针使用过程中,我遇到了这个问题-我正在尝试用另一个指向字符串的子字符串替换指向(意思是,不是字符数组(中的子字符串。
char *str1="I like pizza!";
char *str2="love";
printf("%sn", str1);
for (int i=2, j=0; j<4; i++, j++) {
*(str1+i)=*(str2+j);
}
printf("%sn", str1);
结果应该是 - 我看到它的方式 - 输出"我喜欢披萨",然后是"我爱披萨"的输出。相反,我得到一个段错误(错误 139(。我在网上搜索解决方案,但找不到问题所在。
(我知道 for 循环并不完美,至少可以说,但这不是这里的问题(。请帮我解决:)
因为这些是指向程序二进制文件中只读部分的指针。您无法更改内容。试试这个:
char str1[] = "I like pizza!";
char str2[] = "love"; // actually, this one can stay as a pointer as we're only reading
现在,字符串被复制到堆栈中,程序按预期工作。
str1
和 str2
指向的字符串是只读的。
尝试更改其内容的行为未定义。
改用 char str1[] = "I like pizza!";
&c.,这会将只读字符串复制到 str1[]
,然后您可以自由修改。