#include <stdio.h>
void main(){
char *str[]={"aa","bb"};
str[0][0]='h';
}
このコードを実行すると、セグメンテーション違反が発生します。誰かが理由を知っていますか?
前もって感謝します。
#include <stdio.h>
void main(){
char *str[]={"aa","bb"};
str[0][0]='h';
}
このコードを実行すると、セグメンテーション違反が発生します。誰かが理由を知っていますか?
前もって感謝します。
文字列定数が占める場所に割り当てていますが、これは未定義の動作です。文字列の最大長がわかっている場合は、次のように実行できます。
char ss[][3] = {"aa", "bb"};
正確に同等ではありませんが、機能するはずです。最大長がわからない場合、またはあちこちで数バイトを無駄にしたくない場合でも、もう少し作業を行うことでそれを実行できます。
char aa[] = "aa";
char bbbb[] = "bbbb";
char *ss[] = {aa, bbbb};
リテラル定数を更新しようとしていますが、これは許可されていません。未定義の動作になります。