答え
![](/wp-content/include/images/avatar/teacher/14.png)
これだと字下げのスペースが文字列に含まれてしまう。
puts(
"むかしむかしあるところに、\
おじいさんとおばあさんがすんでいました。\
あるひのこと、おじいさんはやまへしばかりに、\
おばあさんはかわへせんたくにいきましたとさ。\
めでたしめでたし。"
);
![](/wp-content/include/images/avatar/teacher/13.png)
こうやって字下げするのが正解!
puts(
"むかしむかしあるところに、"
"おじいさんとおばあさんがすんでいました。"
"あるひのこと、おじいさんはやまへしばかりに、"
"おばあさんはかわへせんたくにいきましたとさ。"
"めでたしめでたし。"
);
解説
C言語では、連続する文字列リテラルは結合されます。つまり、ダブルクオート("
)で囲まれたテキストは、2つ以上に分割して書いても意味が変わらないということです。
![](/wp-content/include/images/avatar/teacher/3.png)
これを知っていれば、長い文字列でもきれいに書けるようになるのよ。
![](/wp-content/include/images/avatar/student/12.png)
まぁ、そうですかねぇ……。
![](/wp-content/include/images/avatar/teacher/2.png)
あら、あまり納得してない顔ね。
![](/wp-content/include/images/avatar/student/2.png)
なんというか、メリットが少なくないですか?
![](/wp-content/include/images/avatar/teacher/7.png)
たしかに。長い文字列を分けたいときなんて、そんなにないものね。
![](/wp-content/include/images/avatar/student/6.png)
そうですよ!そこが引っかかってたんです!
![](/wp-content/include/images/avatar/teacher/5.png)
それじゃあ、応用編のテクニックを教えちゃおうかしら。
![](/wp-content/include/images/avatar/student/3.png)
やったー!
ここで、応用例を一つ紹介しましょう。以下は第04問のプログラムを、文字列リテラルが結合されることを活かして書き直したものです。
main.c
#include <stdio.h>
#include <stdlib.h>
#define GREETING_MESSAGE(NAME) ("Hello, " NAME "!")
int main(void) {
puts(GREETING_MESSAGE("Leo"));
return EXIT_SUCCESS;
}
実行結果
Hello, Leo!
![](/wp-content/include/images/avatar/student/5.png)
たしか、あいさつを表示するプログラムでしたよね。
![](/wp-content/include/images/avatar/teacher/6.png)
そうね。
GREETING_MESSAGE()
で、文字列が結合されているのが分かるかしら?
![](/wp-content/include/images/avatar/student/7.png)
ええと、ちょっと考えてみますね……。
![](/wp-content/include/images/avatar/student/12.png)
GREETING_MESSAGE()
の中身はこうだから……
"Hello, " NAME "!"
![](/wp-content/include/images/avatar/student/2.png)
NAME
のところに名前が入って……
"Hello, " "Leo" "!"
![](/wp-content/include/images/avatar/student/8.png)
3つの文字列が結合されるのか!
"Hello, Leo!"
![](/wp-content/include/images/avatar/teacher/4.png)
正解!いろいろと応用がきくテクニックだということが、分かってもらえたかしら?
![](/wp-content/include/images/avatar/student/4.png)
はい!おぼえておくと、いろいろ使えそうですね。
ここがポイント!
![](/wp-content/include/images/avatar/teacher/6.png)
ダブルクオートで囲まれた文字列は、続けて書くと結合される!
修正後のプログラム
main.c
#include <stdio.h>
#include <stdlib.h>
int main(void) {
puts(
"むかしむかしあるところに、"
"おじいさんとおばあさんがすんでいました。"
"あるひのこと、おじいさんはやまへしばかりに、"
"おばあさんはかわへせんたくにいきましたとさ。"
"めでたしめでたし。"
);
return EXIT_SUCCESS;
}
実行結果
むかしむかしあるところに、おじいさんとおばあさんがすんでいました。あるひのこと、おじいさんはやまへしばかりに、おばあさんはかわへせんたくにいきましたとさ。めでたしめでたし。