可能重复:
Why do I get a segmentation fault when writing to a string?
说我有s =“你好”。我希望它转换为s =“Hello”。
这就是我所拥有的
# include <stdio.h>
# include <string.h>
main()
{
char *s = " Hello";
char *shift(char *, int);
shift(s+1,-1);
printf("%s", s);
}
char *shift (char *str, int units)
{
if (units < 0)
{
for (; *str != '\0'; str++)
*(str + units) = *str;
*(str + units) = '\0';
return str-strlen(str)-units;
}
}
该计划正在终止!甚至没有显示错误。哪里出错...
最重要的是,是什么让这个程序将控制权交给操作系统终止?
答案 0 :(得分:4)
您无法修改字符串文字。此外,您永远不会检查str + units
是否在字符串中,即它不会超出字符串的已分配内存(假设您传递了一个真实的字符串,而不是字符串文字作为参数)。