C/C++の基礎

配列と文字列

C文字列はnull終端char配列、std::stringはstorageを所有して長さを保持します。

配列と文字列とは?

C文字列はnull終端char配列、std::stringはstorageを所有して長さを保持します。

固定配列を走査し文字列長を安全に求めます。

重要なポイント

  • compiler warningを有効にしてすべて修正します。
  • 各値の型とlifetimeを把握します。
  • 入力と配列の境界を検証します。

CとC++のコード例

C
実行 →
main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    int values[] = {3, 5, 8, 13};
    char name[] = "Ada";
    size_t count = sizeof values / sizeof values[0];
    printf("%s: %zu values, %zu letters\n", name, count, strlen(name));
    return 0;
}
期待される出力
Ada: 4 values, 3 letters
C++
実行 →
main.cpp
#include <array>
#include <iostream>
#include <string>

int main() {
    std::array values{3, 5, 8, 13};
    std::string name = "Ada";
    std::cout << name << ": " << values.size()
              << " values, " << name.size() << " letters\n";
}
期待される出力
Ada: 4 values, 3 letters

CとC++の比較

sizeofが要素数を出せるのはlocal arrayです。strlenは終端まで走査し、std::string::sizeはO(1)です。

C

Cは小さな手続き型APIと表現の詳細を明示します。

C++

C++は低レベルモデルを保ちつつ安全な型を追加します。

練習課題

両方を実行して変更し、言語ごとの保証を確認します。

  • 不正入力と境界値を追加します。
  • -Wall -Wextra -Wpedanticでコンパイルします。
  • 宣言と実装を分割します。