C - 尝试从文件中读取struct

时间:2015-04-12 13:28:05

标签: c struct

我有一个带菜单的程序。 Struct被称为“Siunta”,结构具有称为“nauja”的新值。我正在尝试将其写入文件,然后从文件中读取。下面提供了读写功能。编译器中的错误消息:

  

| 144 |错误:'Siunta'未声明(首次使用此功能)|。

可能出现什么问题?

写作:

FILE* fp = fopen("file.bin", "wb");
struct Siunta nauja;
fwrite(&(nauja.siuntos_nr), sizeof(nauja.siuntos_nr), 1, fp);
fwrite(&(nauja.destination), sizeof(nauja.destination), 1, fp);
fwrite(&(nauja.svoris), sizeof(nauja.svoris), 1, fp);
fclose(fp);

阅读:

FILE* fp = fopen("file.bin", "rb");
struct Siunta nauja2;        
fread(&nauja2, sizeof(Siunta),1,fp);    
printf("siuntos nr: %d destination: %s Svoris: %d",nauja2.siuntos_nr, nauja2.destination, nauja2.svoris);

3 个答案:

答案 0 :(得分:3)

发生的错误是由于sizeof(Siunta)可能是sizeof(struct Siunta),但你也可以使用sizeof(nauja2)(可能更好)。

阅读你的代码,我看到你已经写了一些Siunta结构的字段,但是你想读完所有结构之后!

你必须使用:

编写结构
fwrite(&nauja, sizeof(nauja), 1, fp);

然后你可以阅读:

fread(&nauja2, sizeof(nauja2), 1, fp);

答案 1 :(得分:1)

您需要在{<1}}中写下struct Siunta而不是Siunta

fread(&nauja2, sizeof(Siunta),1,fp);

或者,您可以事先创建一个typedef,如下所示:

typedef struct Siunta Siunta;

答案 2 :(得分:0)

只需按字段编写结构字段即可。还可以使用网络订购号码。这将使其在未来证明,同时在开始时设置版本号。