1
#include <stdio.h>

void main(){
    char *str[]={"aa","bb"};
    str[0][0]='h';
}

このコードを実行すると、セグメンテーション違反が発生します。誰かが理由を知っていますか?

前もって感謝します。

4

2 に答える 2

4

文字列定数が占める場所に割り当てていますが、これは未定義の動作です。文字列の最大長がわかっている場合は、次のように実行できます。

char ss[][3] = {"aa", "bb"};

正確に同等ではありませんが、機能するはずです。最大長がわからない場合、またはあちこちで数バイトを無駄にしたくない場合でも、もう少し作業を行うことでそれを実行できます。

char aa[] = "aa";
char bbbb[] = "bbbb";
char *ss[] = {aa, bbbb};
于 2012-04-17T15:49:00.130 に答える
3

リテラル定数を更新しようとしていますが、これは許可されていません。未定義の動作になります。

于 2012-04-17T15:48:47.013 に答える