構造体の配列の合計バイト数を取得しようとしています。 1つの構造体の合計バイトは96バイトです。私は最初にパディングされたバイトを避けるためintを配置します。私は実際に何をしているのかは分かりませんが、ここで貼り付けたサンプルに基づいてstruct [MAX]を割り当てるのは96バイト* 50になります。私は約700万バイト、またはいくらかのゴミ値を取得します。誰でも私はstruct address addr[MAX]
の額を計算するのを助けることができるMAX = 50
。ここに完全なサンプルがあります。みんなありがとう!あなたはADDRから構造を割り当てられ、このラインと構造体配列のサイズを正しく計算するにはどうすればよいですか?私はこの権利をしていますか?
#include <stdio.h>
#include <stdlib.h>
#define MAX 50 //for structure
struct address {
int zip; // 4 bytes
char name[20]; // 20 bytes
char street[40]; // 40 bytes
char city[16]; // 16 bytes
char state[4]; // 4 bytes
char country[10]; // 10 bytes
};
int main()
{
struct address addr[MAX];
unsigned int *allocation;
allocation = malloc(MAX * sizeof(struct address));
if (!allocation) {
printf("Memory allocation error\n\n");
exit(1);
} else {
printf("address start: 0x%x08 - size in bytes: %d\n", &addr, sizeof(struct address));
printf("sizeof zip %d\n", sizeof(addr[0].zip));
printf("sizeof name %d\n", sizeof(addr[0].name));
printf("sizeof street %d\n", sizeof(addr[0].street));
printf("sizeof city %d\n", sizeof(addr[0].city));
printf("sizeof state %d\n", sizeof(addr[0].state));
printf("sizeof country %d\n", sizeof(addr[0].country));
printf("total size of structure is %d\n", allocation);
}
free(allocation);
system("PAUSE");
return 0;
}
'allocation'は、割り当てられたデータのサイズではなく、割り当てられたデータのポインタです...なぜ、それが既に自動変数として割り当てられている場合に構造体を割り当てるのですか? –
私はそれが割り当てられたのか分からなかった。だから私はmallocを必要としない?と割り当てポインタ?したがって、完全な構造体配列の合計バイト数は、次のようになります: 'totalBytes = MAX * sizeof(struct address);'? – Soundview
あなたはそれを必要としません。 –