0

次のコードは、システムでセグメンテーション違反を引き起こします。理由がわかりません。どんな助けでも大歓迎です。

#include<stdio.h>
int main() {
    char * a = "abc";
    *a = 'c';
    printf("%c\n", *a);
    return 0;
}
4

2 に答える 2

6

標準では、これを§J.2で未定義の動作として明示的にリストしています。

—プログラムは文字列リテラルを変更しようとします(6.4.5)

ローカル配列にコピーする場合は、次のようにします。

char a[] = "abc";

aはスタック上の配列であり、自由に変更できます。

于 2011-03-04T04:50:42.253 に答える
2

文字列リテラルを変更しようとすると、未定義の動作が発生します。

于 2011-03-04T04:48:24.913 に答える