1

重複の可能性:
文字列への書き込み時にセグメンテーション違反が発生するのはなぜですか?

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;
    }

}

番組終了!エラーも表示されません。私が間違っているところ..

最も重要なことは、このプログラムが制御を OS に渡して終了させる理由は何ですか?

4

1 に答える 1

4

文字列リテラルは変更できません。また、文字列内にあることを確認することstr + unitsはありません。つまり、文字列の割り当てられたメモリから出ることはありません (引数として文字列リテラルではなく、実際の文字列を渡したと仮定します)。

于 2013-01-28T16:58:56.193 に答える