広告スペース

確認問題(文字列)

ヌル終端、strlen/sizeof、strcmp、文字列代入の理解度を確認しましょう。

確認問題1 ― 文字列の末尾

char s[] = "Hello";
printf("%lu\n", sizeof(s));

出力結果は?

5
6
4
コンパイルエラー
解説: 文字列リテラルは末尾に '\0'(ヌル終端)が自動追加されます。
"Hello" は H,e,l,l,o,\0 の 6バイト

確認問題2 ― strlen vs sizeof

char s[] = "ABC";
printf("strlen=%lu, sizeof=%lu\n", strlen(s), sizeof(s));

出力結果は?

strlen=3, sizeof=3
strlen=3, sizeof=4
strlen=4, sizeof=4
strlen=4, sizeof=3
解説: strlen は '\0' を含まない文字数 → 3。sizeof は '\0' 含むバイト数 → 4。
この違いは頻出なので必ず覚えましょう。

確認問題3 ― strcmpの戻り値

char a[] = "apple";
char b[] = "apple";
if (strcmp(a, b) == 0) {
    printf("同じ\n");
} else {
    printf("違う\n");
}

出力結果は?

同じ
違う
コンパイルエラー
未定義動作
解説: strcmp は文字列が等しいとき 0 を返します。
== で直接比較するとアドレス比較になるので、文字列の比較には必ず strcmp を使うのがC言語の基本です。

確認問題4 ― 文字列の代入

char s[10];
s = "Hello";
printf("%s\n", s);

出力結果は?

Hello
コンパイルエラー
空文字列
未定義動作
解説: 配列に = で文字列を代入できません。strcpy(s, "Hello") を使います。
宣言時の char s[] = "Hello" は初期化なのでOK。代入と初期化は別物です。

結果

回答してください
文字列の講座に戻るホームへ

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で演習問題も充実。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。

この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ