所以我有一个结构
struct records {
short link;
double gate;
unsigned char bar;
int rest;
char rink;
};
现在我想读取二进制输入并使用fread()
打印出来。我只是弄清楚究竟要做什么。
所以我只有
int main(int argc, char* argv[]){
}
首先,你如何打开二进制文件?我在网上看到的所有示例都只使用main()
,当使用fopen()
时,他们总是指定输入。如何使用命令行参数指定要打开的文件?
然后,如何将这些文件读入我创建的struct
并打印出来?
任何帮助表示感谢,非常感谢你。
答案 0 :(得分:2)
运行程序时,请提供二进制文件的名称作为参数。
argv[0]
将是程序本身的名称以及argv[1]
中文件的名称。
在评论中提及Jonathan时,您必须确保argv[1]
在访问之前确实存在,否则会导致错误。
像
这样的东西if(argc<2)
{
printf("\nError");
return -1;
}
应该照顾好。
然后做
FILE *fin=fopen(argv[1], "rb");
然后使用fread()
从文件中读取。
fopen()
的第二个参数是打开文件的模式。
r和b in&#34; rb&#34;分别表示读取和二进制。
至于fread()
,首先要创建一个变量,比如a
类型struct records
。
然后使用
fread(&a, sizeof(a), 1, fin);
这里我们传递a
的地址,以便将读取的数据存储在那里。
sizeof(a)
表示fread()
和1
读取的每个块的大小是应该读取的块数。
fread()
将返回已成功读取的块数,在我们的示例中为1
。
如果我们要求读取的块数和实际读取的块数不相同,则文件结束或发生错误。
之后我们可以访问a
的每个元素。
https://www.tutorialspoint.com/c_standard_library/c_function_fread.htm http://pubs.opengroup.org/onlinepubs/009695399/functions/fread.html