C++サンプル集

【第1部】C言語(K&R検証)編

0028.文字列の長さを調べる(ポインタ版)

 このサンプルは0009.文字列の長さを調べる配列版からポインタ版に書き直したものです。
 C/C++では配列とポインタには密接な関係にあり、とくに関数の引数に使う場合、ほぼ同じように記述できます

ソース紹介

CPPファイルに記述
#include <iostream>
#include <cstdio>
using namespace std;

/*
sの長さを返す
*/
int strlen(char* s) {
    int n;
    for (n = 0; *s != '\0'; s++) {
        n++;
    }
    return n;
}

/*
文字列の長さを調べる
*/
int main()
{
    char str1[] = "hello";
    char str2[] = "abcdefgh";

    cout << str1 << "は" << strlen(str1) << "文字" << endl;
    cout << str2 << "は" << strlen(str2) << "文字" << endl;

    return 0;
}
出力
helloは5文字
abcdefghは8文字

サンプル説明

 これは0009.文字列の長さを調べると同じ出力になります。
 さらに言えば、ポインタ定数ではなく変数ですから、以下のようにも書けます。

ソース紹介

CPPファイルに記述
/*
sの長さを返す
*/
int64_t strlen(char* s) {
    char* p = s;
    while (*p != '\0') {
        p++;
    }
    return p - s;
}

サンプル説明

 ここでint64_tは重要です。64ビット環境ではアドレッシングモード64ビットです。ポインタの大きさはアドレッシングモードに依存します。32ビット環境であれば、アドレッシングモード32ビットなのでintで問題ありません。

K&Rでの記述

 元になったのは第5章:ポインタと配列に記述されています。ポインタと配列、および、アドレス計算の説明のところです。