0

char ポインター変数が指す配列のサイズを知る必要があります。

しかし、 sizeof 操作が機能していないことはわかっています。

char a[5];
char *b= a;
int c = sizeof(b);
printf("%d", sizeof(b)); // 8(64 bit cpu) printed, not 5 .

前もって感謝します。

4

5 に答える 5

1

コードの一部が配列のサイズを知る必要がある場合は、それを呼び出すコードが配列のサイズを伝えていることを確認してください。

于 2013-03-18T12:21:27.860 に答える
0

いいえ、ポインタに変換すると(これは、配列を引数として関数に渡すときにも行われます)、配列に関するすべてのサイズ情報が失われます。

于 2013-03-18T12:15:30.847 に答える
0

ポインター(このようなことを行うと配列が減衰するもの)は、ポインターが指しているデータのサイズについて何も「知りません」。個別に追跡する必要があります。

于 2013-03-18T12:15:38.567 に答える
0

その情報を取得することはできません。必要な場合は、情報を埋め込むしかありません。

int* array = malloc( sizeof(int) * (n + 1) );
*array = n;
++array;

サイズを知りたいときは

int n = *(array - 1);

char または必要なタイプで同じことができます。

于 2013-03-18T12:23:12.453 に答える
-1

これは、4 バイトのアラインメントが原因である可能性があります。

確認するには、a[8]、a[10] などを試してください

于 2013-03-18T12:18:47.023 に答える