1. ホーム
  2. c

[解決済み] C char 配列をポインタで反復処理する。

2022-02-01 06:01:19

質問

私はC言語の初心者で、ポインタを使用して配列の各要素を取得する方法について疑問に思っていました。配列のサイズがわかっていれば簡単なのですが。 そこで、コードを紹介します。

#include <stdio.h>

int main (int argc, string argv[]) {
    char * text = "John Does Nothing";
    char text2[] = "John Does Nothing";

    int s_text = sizeof(text); // returns size of pointer. 8 in 64-bit machine
    int s_text2 = sizeof(text2); //returns 18. the seeked size.

    printf("first string: %s, size: %d\n second string: %s, size: %d\n", text, s_text, text2, s_text2);

    return 0;
}

では、そのサイズを決定するために text これを行うには、文字列の最後が '\0' 文字が含まれています。そこで、次のような関数を書いてみた。

int getSize (char * s) {
    char * t; // first copy the pointer to not change the original
    int size = 0;

    for (t = s; s != '\0'; t++) {
        size++;
    }

    return size;
}

しかし、この関数は、ループが終了しないようで、うまくいきません。

では、実際のサイズを取得する方法はあるのでしょうか? char のポインタが指しているのは何ですか?

解決方法は?

ポインタをチェックする代わりに、現在値をチェックする必要があります。次のようにすればいい。

int getSize (char * s) {
    char * t; // first copy the pointer to not change the original
    int size = 0;

    for (t = s; *t != '\0'; t++) {
        size++;
    }

    return size;
}

あるいはもっと簡潔に。

int getSize (char * s) {
    char * t;    
    for (t = s; *t != '\0'; t++)
        ;
    return t - s;
}