char ポインター変数が指す配列のサイズを知る必要があります。
しかし、 sizeof 操作が機能していないことはわかっています。
char a[5];
char *b= a;
int c = sizeof(b);
printf("%d", sizeof(b)); // 8(64 bit cpu) printed, not 5 .
前もって感謝します。
char ポインター変数が指す配列のサイズを知る必要があります。
しかし、 sizeof 操作が機能していないことはわかっています。
char a[5];
char *b= a;
int c = sizeof(b);
printf("%d", sizeof(b)); // 8(64 bit cpu) printed, not 5 .
前もって感謝します。
コードの一部が配列のサイズを知る必要がある場合は、それを呼び出すコードが配列のサイズを伝えていることを確認してください。
いいえ、ポインタに変換すると(これは、配列を引数として関数に渡すときにも行われます)、配列に関するすべてのサイズ情報が失われます。
ポインター(このようなことを行うと配列が減衰するもの)は、ポインターが指しているデータのサイズについて何も「知りません」。個別に追跡する必要があります。
その情報を取得することはできません。必要な場合は、情報を埋め込むしかありません。
int* array = malloc( sizeof(int) * (n + 1) );
*array = n;
++array;
サイズを知りたいときは
int n = *(array - 1);
char または必要なタイプで同じことができます。
これは、4 バイトのアラインメントが原因である可能性があります。
確認するには、a[8]、a[10] などを試してください