当我运行我的程序并且我选择查看产品列表时,它不会打印任何内容.过了一段时间,我发现它的值fl_size总是为0.这是为什么?
void view_prdct_code_list() {
FILE *stock = fopen("stock.dat","r+");
assert(stock);
int fl_size=ftell(stock);
int prd_size= sizeof(product);
int quantity= fl_size/prd_size;
printf("fl_size=%d",fl_size);
fseek(stock,0,SEEK_SET);
prdct cprd= (product *)malloc (sizeof(product)*quantity);
assert(cprd);
int i;
fread(cprd,prd_size,quantity,stock);
for (i=0;i<quantity;i++){
printf("PRODUCT CODE: %d\n",cprd->code);
}
free(cprd);
fclose(stock);
}
Run Code Online (Sandbox Code Playgroud)
ftell不返回文件的总大小; 它返回文件中的当前读取或写入位置.ftell打开文件后立即调用,因此该位置是文件的开头.您可以fseek(stock, 0, SEEK_END)在调用之前使用查找结束ftell,也可以fstat(fileno(stock))直接从操作系统下拉图层并使用它来检索文件大小.
附加说明:
fread 即使您要求,也不保证能够一口气读取整个文件.ftell返回a long,而不是a int."r+b".malloc.(有必要在C++中执行此操作,但在C中它不仅是不必要的,它可以隐藏错误.)