C言語学習ポータル(無料版) 学習コンテンツ つまずきとエラー char配列に文字列を代入できない

🔤 文字列

char配列に文字列を代入できない

どんなときに起きるか

char s[10]; s = "hello"; で gcc: error: assignment to expression with array type、clang: error: array type 'char[10]' is not assignable。

なぜそうなるのか

配列名は「先頭を指す入れ物そのもの」なので、丸ごと代入はできません。= で文字列を書けるのは、宣言と同時の初期化のときだけです。

直し方・再発防止

あとから入れるなら strcpy(s, "hello");、安全に書くなら snprintf(s, sizeof s, "%s", "hello");。宣言時なら char s[10] = "hello"; と書けます。同じ理由で、文字列の比較も == ではなく strcmp を使います。

クォート違い(4コマ漫画)
4コマで見る「クォート違い」

アプリでしっかり学ぶ(無料・登録不要) つまずき一覧へ

同じ場面で起きやすいつまずき

ヌル終端 '\0' を忘れる%s で表示すると、狙った文字列の後ろに文字化けが延々と続きます。strlen が想定外の大きな値を返します。運… strcpy でバッファをあふれさせる実行時に * stack smashing detected *: terminated と出て Aborted… gets を使ってしまうgcc: warning: implicit declaration of function 'gets'(C2… 文字と文字列の混同('a' と "a")char c = "A"; で gcc: warning: initialization of 'char' f…

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH