3

配列の要素数を計算しようとしていたところ、次の行だと言われました

int r = sizeof(array) / sizeof(array[0]) 

配列内の要素の数を教えてくれます。そして、少なくとも int 配列の場合、このメソッドが機能することがわかりました。ただし、このコードを試すと、問題が発生します。

#include <iostream>
#include <Windows.h>
using namespace std;

int main() {
    char binaryPath[MAX_PATH];
    GetModuleFileName(NULL, binaryPath, MAX_PATH);
    cout << "binaryPath: " << binaryPath << endl;
    cout << "sizeof(binaryPath): " << sizeof(binaryPath) << endl;
    cout << "sizeof(binaryPath[0]: " << sizeof(binaryPath[0]) << endl;

    return 0;
}

このプログラムを実行すると、binaryPath の値は

C:\Users\Anish\workspace\CppSync\Debug\CppSync.exe

260のsizeof(バイト単位?ビット?idk、誰かこれも説明できますか?)によって返されるサイズがあるようです。行

sizeof(binaryPath[0]);

値は 1 です。

明らかに、260 を 1 で割ると 260 という結果が得られますが、これは配列内の要素の数ではありません (私のカウントでは 42 程度です)。誰かが私が間違っていることを説明できますか?

私が考えているように、実際には配列ではないというこっそり疑いがあります(私はJavaとPythonから来ました)が、よくわからないので、皆さんに尋ねています。

ありがとう!

4

4 に答える 4

7

260 はMAX_PATHです。これsizeofは、配列内の文字列のサイズだけでなく、配列全体のサイズを返すためです。

探している動作を取得するには、strlen代わりに次を使用します。

cout << "binaryPath: " << binaryPath << endl;
cout << "strlen(binaryPath): " << strlen(binaryPath) << endl;
于 2013-04-17T14:03:24.343 に答える
5

文字列のサイズを探している場合は、を使用する必要がありstrlenます。使用sizeofすると、null で終了する文字列のサイズではなく、割り当てられた量がわかります。

std::cout << "strlen(binaryPath: " << strlen(binaryPath) << std::endl;

上に追加する必要があります#include <cstring>

于 2013-04-17T14:03:12.323 に答える
3

配列のサイズとそれに含まれる文字列の長さを混同しています。sizeof(arrayVar)配列に含まれる文字列の長さに関係なく、配列全体のサイズが得られます。strlen()含まれる文字列の実際の長さを決定するには、を使用する必要があります。

于 2013-04-17T14:04:24.770 に答える