c - 程序在 C 中移动字符串时终止

标签 c string

<分区>

Possible Duplicate:
Why do I get a segmentation fault when writing to a string?

假设我有 s = "Hello"。我希望它转换成 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;
    }

}

程序正在终止!甚至没有显示错误。我哪里错了..

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

最佳答案

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

关于c - 程序在 C 中移动字符串时终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567119/

相关文章:

c - c中的整数如何存储在内存中?

python - 在另一个字符串中多次查找一个字符串 - Python

c - 在存储到常量字符数组之前修改字符串

javascript - 只返回数字并从 JavaScript 中的现有数组中删除字符串?

c - 父子在 fork 中的奇怪行为

c - 该代码 C 的可能 3 个输出是什么?叉()

c - Scanf Y/N 并保存以备将来使用

android - 在 .so 中混合使用 c/c++ 和程序集时避免文本重定位

python - 将空字典转换为空字符串

c# - 如何在多个描述字符之间拆分字符串?