每当我想使用C读或写二进制文件时,我都会使用fread()
和fwrite()
函数。它们需要读取或写入的数据字节作为参数,因此我使用sizeof()
函数。现在的问题是:
书上说我应该声明这样一个函数:
fread(&variable,sizeof(TYPE_OF_VAR),quantity,file);
我使用了以下语句,这些语句大部分时间都有效,但并不总是有效:
fread(&variable,sizeof(VARIABLE),quantity,file);
为什么有时有用,但有时却不行?
是否取决于变量的类型(int、char等)?
这取决于我使用的数据的数量吗?
最佳答案
需要记住的是sizeof
是基于编译器在编译时对类型的了解(暂时忽略VLA)。如果给它一个变量,它将使用该变量的类型。
所以,我唯一能想到的是指针在哪里不起作用。
基本上可以归结为:
int x[5];
int *y = &x[0];
int *p = malloc(sizeof(int) * 5);
sizeof(x); // == sizeof(int) * 5
sizeof(y); // == sizeof(int *)
sizeof(p); // == sizeof(int *)
这在处理函数时会变得棘手,因为数组在传递给函数时会衰减为指针。还要注意的是,这三个都是完全相同的:
int func(int *p);
int func(int p[5]);
int func(int p[]);
在所有的3中,p是指针,而不是数组。
关于c - sizeof(var)是否始终在C中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11820621/