struct BOOK
{
char name[120];
char author[120];
int year[50];
};
int main (void)
{
int i;
int number;
struct BOOK* books;
number = 50000;
printf("before \nsizeofbooks %d \n sizeofBOOK %d\n",
sizeof(books), sizeof(struct BOOK));
books = (struct BOOK*)malloc(sizeof(struct BOOK) * number);
printf("sizeofbooks %d \n sizeofBOOK %d\n",
sizeof(books), sizeof(struct BOOK));
free(books);
return 0;
}
输出是:
before
sizeofbooks 4
sizeofBOOK 440
after
sizeofbooks 4
sizeofBOOK 440
它总是输出4,即使我写入不同的数组,但我希望它会改变。我做错了什么?
我的操作系统是winxp 32位,我使用的是代码块。
答案 0 :(得分:7)
books
是一个指针,其大小为4.您无法读取动态创建的“数组”的大小。
当它没有返回NULL时,你会看到malloc有效。
答案 1 :(得分:3)
它打印4,因为它是books
的大小(即指针的大小)。
答案 2 :(得分:0)
替代方案:您可以使用struct BOOK数组,即struct BOOK books [5000];