カワサキの技術ブログ

エンジニア志望によるゆるゆる備忘録。

【新明解C++】学習メモ(8章)

『新・明快C++入門』第8章(文字列とポインタ)

8-1 文字列とポインタ(p282~297)

文字列リテラル

  • 二重引用符””で囲まれた文字の並びを、文字列リテラルという。
  • 文字列リテラルconst char型の配列に格納され、後ろに自動的にナル文字’\0’がつく。
  • 文字列リテラルの大きさは、文字数+ナル文字(1文字分)になる。
  • ナル文字は文字列終了の目印

配列による文字列

  • 文字列をchar型の配列に格納することで自在に扱えるようになる(文字列リテラルは定数)。
  • 文字列の初期化方法は以下の3つ。
char str[] = {"A", "B", "C"}  // ナル文字('\0')は省略
char str[] = {"ABC"}
char str[] = "ABC"
  • 全て文字列"ABC"を格納するよう初期化できる。
  • 配列の要素数より文字列の長さが短い場合、不足分は'\0'で初期化される。
  • cinを用いて用意した配列にキーボードから入力された文字列を格納できる。
toupper/tolower関数
  • <cctype>ヘッダ
  • 大文字→小文字(小文字→大文字)を実現する標準ライブライ関数
  • 戻り値は当該文字のint型の文字コードになる。

ポインタによる文字列

char* ptr = "ABC"; //ポインタによる文字列の宣言・初期化
  • 文字列リテラルを評価すると、先頭文字へのポインタが得られる。
  • そのため、上記コードだと'A'のアドレスでptrが初期化される。
  • 配列分とポインタ分の記憶領域が必要になるため、配列による文字列よりも多くの記憶領域を要する。

配列による文字列とポインタによる文字列のちがい

文字列の書き換え
  • 配列による 文字列は書き換え不可。
  • ポインタによる文字列は書き換え可能(ポインタの参照先が変わる)。
  • 参照先が変わった場合、元々参照していた文字列の記憶領域はプログラムからアクセスできなくなる。
文字列の配列
char str1[][6] = { "ABC", "DE", "FGHIJ"}; // 配列による文字列の配列
char* str2[] = { "ABC", "DE", "FGHIJ"}; // ポインタによる文字列の配列
  • 文字列の配列(2次元配列)
    • 左側の添え字が文字列の番号、右側は文字列の中の文字の場所を示す
    • 文字数が要素数より不足している場合、ヌル文字で埋まる
  • ポインタによる配列(ポインタの配列)
    • 各文字列の先頭の文字のアドレスがそれぞれ配列に格納されている。
    • ヌル文字は必ず文字列1つにつき1個格納される。

8-2 cstringライブラリ(p298~305)

  • strlen : 文字列の長さ
  • strcpy, strncpy: 文字列をコピー
  • strcat, strncat: 文字列を連結
  • strcmp, strncmp: 文字列を比較

参考文献