程序在C中移位字符串时终止

时间:2013-01-28 16:57:48

标签: c string

  

可能重复:
  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;
    }

}

该计划正在终止!甚至没有显示错误。哪里出错...

最重要的是,是什么让这个程序将控制权交给操作系统终止?

1 个答案:

答案 0 :(得分:4)

您无法修改字符串文字。此外,您永远不会检查str + units是否在字符串中,即它不会超出字符串的已分配内存(假设您传递了一个真实的字符串,而不是字符串文字作为参数)。