I ♥ WordPress

[時間割:C言語]『はじめてのC言語完全入門』その11
2008/11/21 22:59 posted by kunkichi

いかんいかん、XBOX360の「FIFA09」が出たせいでサボりまくり、、、
気分を取り直してがんばります。金曜日は「C言語」。今日は文字列です。

はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
塚越 一雄
技術評論社
売り上げランキング: 420963


  • Cには文字列型は存在しない。文字列は文字型の配列を使う。なぜなら可変長だから。
  • 文字列の初期化は以下の数パターン。
    • 文字単位で初期化。#include <stdio.h>
       
      int main()
      {
        char s[5];
       
        s[0] = 'a';
        s[1] = 'b';
        s[2] = 'c';
        s[3] = '\0';
       
        printf("%s\n", s);
       
        return 0;
      }
      ポイントをいくつか。
      • 宣言するときにサイズもあわせて宣言する。サイズは代入したい文字数に1を足しておく。
      • 1を足したのは最後に文字列の終わりを示すEOS(End Of String)の分。EOSにはNULL文字を使う。文字列の場合は\0。
      • printfで出力する場合は%sで配列名を指定する。
    • {}をつかったやり方#include <stdio.h>
       
      int main()
      {
        char s[] = {'a', 'b', 'c'};;
       
        printf("%s\n", s);
       
        return 0;
      }
      この場合はサイズの宣言は不要。よしなにやってくれる。
    • 文字列リテラルで。#include <stdio.h>
       
      int main()
      {
        char s[] = "abc";
       
        printf("%s\n", s);
       
        return 0;
      }
      一番普通。
  • {}を使った場合や文字列リテラルで初期化した場合でもサイズの指定は可能。ただし、EOSの分を足すことを忘れないこと。
  • 同じ文字だけの文字列で初期化する場合は、string.hのmemset関数を使う。#include <stdio.h>
    #include <string.h>
     
    int main()
    {
      char s[4];
     
      memset(s,'a',3);  /* 1: 代入する配列、2:文字、3:文字数 */
      s[3] = '\0';          /* 最後にEOSを代入。面倒、、、 */
     
      printf("%s\n", s);
     
      return 0;
    }
  • 文字列宣言後に文字列リテラルで代入することはできない。その場合はベタに文字配列で要素ごとに代入するか、strcpyを使う(これはまだ先)。文字配列の場合はEOSを最後に代入することを忘れないこと。
  • サイズを超えた場合でも、サイズに見たない場合でも、コンパイラはエラー等を返さないので注意。特に超えた場合は、、、

うーん、やっぱり文字列の扱いは面倒だなぁ、特にサイズを意識しないといけないってのは厳しい。十分に気をつけるようにして次へ進みましょう。次回は「ファイル入出力」。やっと実際のプログラミングらしくなってきました。

コメント&トラックバック

トラックバックURL





このページの先頭へ