はじめに
C言語でタイトルに書いたことが気になり、プログラムを実行してみたところ、よくわからない結果となったため、どのような仕様でそうなってるのか気になったので質問します。
基本のコード
C
1#include <stdio.h> 2 3void charrr(char*); 4 5int main(void) { 6 char c[5] = "ABC"; 7 8 charrr(c); 9 10 puts("a"); 11 12 puts(c); 13 14 return 0; 15} 16 17void charrr(char *c) { 18 c = "XYZ"; 19 c[1] = 'O'; 20}
まず、このコードはコンパイルに成功します。
そして実行してみると、puts("a");を実行することなく終了します。関数の中で文字列を渡したポインタを添え字でアクセスして代入してしまっていることが原因と考えられます。
次に、関数内のc[1] = 0;をコメントアウトして実行してみます。その結果がこちらです。
a ABC
配列に文字列は代入できないので当然と言えば当然ですが、それならば上のコードはなぜ実行停止してしまうのか分かりません。c言語のどのような仕様がこれを引き起こしているのか教えていただきたいです。よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。