Thinkers'Studio
JavaとC言語の自習ツール
文字列の終端 null文字('\0')に関すること

 C言語では文字列の終端を示すために、文字コード 0 の特別な文字 null文字('\0')を用いる決まりになっていますね。
 ここでは、null文字に関するTipsをいくつか挙げたいと思います。

null文字に関するTips

  • 文字列を入れる配列サイズを決めるときは、null文字の分も考慮すること
        char passwd[9];
        8文字を保存する文字配列なら 8+1文字分必要である。
    
  • 文字配列の初期化では、コンパイラによって null文字が自動的にセットされる
        char str[] = "Hello";
        strにはHelloの後ろにnull文字をつけた内容が入る。
    
  • 文字列操作関数は、処理対象が null文字で終わっていることが前提で作られている
        printf は '\0' の前までを表示する 
        strlen は '\0' の前までの長さを文字列長として返す
        strcpy( s, t ) は、t を s に '\0' を含めてコピーする
        strcat( s, t ) は、t を s の後に '\0' を含めて連結する
    
  • 文字配列にひと文字ずつ入れるなら、null文字も指定すること
        char str[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
    
  • 文字配列をひと文字ずつ操作する処理でよく使う構文は「文字列の終わり(null文字)でない間
        for( i = 0; str[i] != '\0'; i++ ) {
                    :
        }
    
  • 文字配列をひと文字ずつ操作する場合、特に長さが変わる処理では、null文字を最後につけるのを忘れないこと
       (コーディング例 : 3桁ごとにカンマをはさむプログラム例

(今回のクイズです)
 次のプログラムを見てください。
#include <stdio.h>
#include <string.h>
main()
{
    char  name1[24] = "Mickey Mouse";
    char  name2[24] = "Minnie Mouse";

    name1[6] = '\0';
    printf( "Name1 : %s\n", name1 );
    strcat( name1, " and " );
    strcat( name1, name2 );
    printf( "Name1 : %s\n", name1 );
}
 実行すると、結果はどうなるでしょう。予想してください。

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

前回のクイズの答え: (前回の問題を見る
buf1:サイズ 6, 文字列長 5
buf2:サイズ 24, 文字列長 5
buf1 は配列サイズを空とし、初期化文字列 Hello を指定したので、Hello と '\0' の分のサイズ6 で領域が取られました。 文字列長は '\0' の前までなので 5 です。
buf2 は配列サイズを 24 と指定したので、初期化文字列を指定しても配列サイズは 24 のままです。
文字列長は、buf1 と同様 5 です。