2017-08-12 92 views
0

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

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

一个struct现在我想读的二进制输入和使用fread()打印出来。我只是无法弄清楚到底要做什么。

所以我只带了

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

所以第一关,你如何打开一个二进制文件?我在网上看到只有使用fopen()时,他们总是指定输入使用main()和所有的例子。如何使用命令行参数来指定要打开哪个文件?

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

任何帮助表示赞赏,感谢你这么多。

+0

提示1:你忘了''返回0;''语句返回的''结果的main()''。提示2:一旦对提示1进行了更改,在返回语句中设置一个断点并检查argc和argv的内容,同时向程序提供不同的命令行参数。 – BitTickler

回答

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中的“RB”是指读出并分别二进制。

至于fread(),首先创建一个变量,说struct records类型a

然后使用

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

+0

非常感谢。我完成了错误处理,比如'argc <2',更像'if(fin == null)'。你能否详细说明'fread()'? –

+0

@AlonzoRobbe我添加了更多的内容。希望能帮助到你。 –

+0

再次感谢。我有几个问题。首先,'fread'中的'1'是指它从'struct'中读取的数量,或者''struct'的数量。那么对于我的'struct',它仍然是'1'还是'5'?其次,要访问'a'的每个元素并打印它,我只需要为'a [1]'执行'printf(“%d”,a [0])'等等?最后,我们被告知“用自己的fread'分别读取每个字段。”这与你所说的有所不同吗? –

相关问题