如何使用命令行参数读取二进制文件并在C中打印出来?

时间:2017-08-12 04:53:51

标签: c binaryfiles

所以我有一个结构

struct records {
    short link; 
    double gate; 
    unsigned char bar;
    int rest; 
    char rink; 
};

现在我想读取二进制输入并使用fread()打印出来。我只是弄清楚究竟要做什么。

所以我只有

int main(int argc, char* argv[]){
}

首先,你如何打开二进制文件?我在网上看到的所有示例都只使用main(),当使用fopen()时,他们总是指定输入。如何使用命令行参数指定要打开的文件?

然后,如何将这些文件读入我创建的struct并打印出来?

任何帮助表示感谢,非常感谢你。

1 个答案:

答案 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