2012-04-17 13 views
1
#include <stdio.h> 

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

このコードを実行すると、セグメント化エラーが発生します。誰もその理由を知っていますか?文字セグメンテーションフォルトを割り当てる

ありがとうございます。

+1

可能重複Linux on C](http://stackoverflow.com/questions/1773079/segmentation-fault-with-char-array-and-pointer-in-c-on-linux) – Timbo

答えて

4

文字定数で占められている場所に、未定義の動作を割り当てています。

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

文字列の最大長を知っていれば、これは可能ですが、それはうまくいくはずです。あなたが最大の長さを知らない、またはここにあるいくつかのバイトを無駄にしたくない場合は、まだ少しより多くの仕事でそれをやってのけることができます。

char aa[] = "aa"; 
char bbbb[] = "bbbb"; 
char *ss[] = {aa, bbbb}; 
char配列とポインタで[セグメンテーション違反の
3

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

+0

作業には*必須*はありませんISO Cで、このコンパイラ/環境では許可されていません(少なくともデフォルトでは動作するように要求する方法があります)。 GCCは '-fwritable-strings'のサポートを取り除いてこれを許可していました。 – Kaz

関連する問題