Thinkers'Studio
JavaとC言語の自習ツール
文字列長と配列サイズの使い分け

 文字列の長さを求めるときは strlen を使います。

【 strlen の形式 】
  strlen( char *s )    文字列sの長さを調べて返す
                       文字列の終端'\0'は長さに含まれない
                       漢字などの全角文字の場合は、ひと文字で2と数えられる
 例えばこんな文字配列があるとき
  char sw1[] = "Cake";
  char sw2[] = "クッキー";
 文字列長と配列サイズを調べるには
  printf( "%d\n", strlen( sw1 ) );
  printf( "%d\n", strlen( sw2 ) );
  printf( "%d\n", sizeof sw1 );
  printf( "%d\n", sizeof sw2 );
 sizeof は、前回のTips で使いましたね。
 実行すると、strlen の結果は sw1 が 4, sw2 が 8、sizeof は sw1 が 5, sw2 が 9 となります。
 sizeof で求めるサイズには、 '\0' の分も含まれます。

(参考) sizeof の利用
 文字列の場合 strlen を利用する機会が多そうですが、sizeof はたとえば次のような場面でよく使われます。
 文字配列のサイズを超えないように入力するために、最大で読み込むサイズに sizeof(buf) を指定しています。

#include <stdio.h>
main()
{
    char buf[256];
  
    printf( "文字列を入力してください\n" );
    if( fgets( buf, sizeof(buf), stdin ) != NULL )
        printf( buf );
}

(今回のクイズです)
 下は、sizeofstrlen で求めた結果を比較するプログラムです。

#include <stdio.h>
#include <string.h>
main()
{
    char  buf1[]   = "Hello";
    char  buf2[24] = "Hello";

    printf( "buf1:サイズ %d, 文字列長 %d\n", sizeof buf1, strlen(buf1) );
    printf( "buf2:サイズ %d, 文字列長 %d\n", sizeof buf2, strlen(buf2) );
}
 実行すると、結果はどうなるでしょう。予想してください。

   (答えは、次回のC言語の Tips で ・・・)

前回のクイズの答え: (前回の問題を見る
  #define NARTIST ((sizeof guests)/(sizeof(struct artist_st)))
構造体配列 guests のサイズをひとつ分の構造体サイズで割って、guests配列の要素数を調べます。