error: missing terminating " character の原因と直し方
文字列リテラルを開いたダブルクォートを閉じ忘れたときに出るエラーです。1行の途中で誤って別の記号を書いてしまった場合にも起きます。
エラーメッセージの読み方
main.c:4:12: error: missing terminating " character
main.c- ファイル名
4- 行番号
12- 列番号 — この位置でgccが構文解析に失敗しました
missing terminating " character- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 #include <stdio.h> 2 3 int main(void) { 4 printf("hello ); ^ 5 return 0; 6 }
main.c:4:12: error: missing terminating " character
開いたダブルクォートは同じ行の中で閉じる必要があります。閉じ忘れると、行末までが1つの未完成な文字列として扱われます。
直し方: "hello を "hello" にします。
広告
広告スロット(未設定)
パターン2
1 #include <stdio.h> 2 3 int main(void) { 4 printf("score: %d\n ); ^ 5 return 0; 6 }
main.c:4:12: error: missing terminating " character
書式指定子や改行を含む文字列でも、閉じクォートを忘れれば同じエラーになります。
直し方: "score: %d\n を "score: %d\n" にします。
パターン3
1 #include <stdio.h> 2 3 int main(void) { 4 char *msg = "done ; ^ 5 printf("%s\n", msg); 6 return 0; 7 }
main.c:4:17: error: missing terminating " character
変数への代入でも同様です。printfの引数だけの問題ではありません。
直し方: "done を "done" にします。
よくある誤解
文字列の途中で改行しても自動的に閉じられるわけではありません。Cの文字列リテラルは同じ行の中でダブルクォートを閉じる必要があり、複数行にまたがる文字列を書きたい場合は連結や\nの利用など別の方法が必要です。
まとめ
error: missing terminating " characterは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。