2011-06-19 17 views

答えて

4

"David"のような文字列リテラルを使用すると、struprを呼び出すときに何をやっているである、変更することはできません。前に文字列(たとえば、strdup)をコピーする必要があります。

struct emp e1={"David",23}; 

は「ダビデは、」データに存在するので、それは、読み取り専用、またはconstの、文字列であるので

+0

この問題を発見するためのGCC警告オプションが追加されました。-Wwrite-strings。 –

1

あなたは、ワンセグ障害を取得しています。

あなたはその同じconstの文字列を変更しようとしているあなた

strupr(e2.n); 

。あなたは「デビッド」読み取り専用です自然の中で文字列リテラルを、作ったstruct emp e1={"David",23};これにより

struct emp e2; 
e2.age = e1.age; 
e2.n = (char *)malloc(SOME_SIZE); 
strcpy(e2.n, e1.n); //here you copy the contents of the read-only string to newly allocated memory 
strupr(e2.n); 
printf(...); 
free(e2.n); 
return 0; 
0

:コードを作業する

。実行可能ファイルでは、実行可能ファイルの.rodataまたは同等のセクションに格納されます。これは読み取り専用です。 strupr()によって、この読み取り専用データを変更しようとしているため、セグメンテーションフォルトが発生しています。

関連する問題