我可以在文件中保存结构,例如txt.file吗?

时间:2014-01-20 11:54:37

标签: c

我可以在文件中保存结构,例如保存到txt吗?如果可以的话,是否可以重新打开它并获取数据?

也许是这样的:

struct guest
{
        int tel;
        char name[20];
        char country[20];
} ;

int main()
{

        record.tel=231231;
        strcpy(record.name, "Raju");
        record.country= China;

4 个答案:

答案 0 :(得分:1)

fprintf(file, "%d %20s %20s\n", record.tel, record.name, record.country);
fscanf(file, "%d %20s %20s\n", &record.tel, &record.name, &record.country);

UPD:如果name和/或country可能包含空格,请使用以下内容进行回读:

char blank[1];

fscanf(file, "%d ", &record.tel);
fread(record.name, 20, 1, file);
fread(blank, 1, 1, file); // assert(blank[0] == ' ');
fread(record.country, 20, 1, file);
fread(blank, 1, 1, file); // assert(blank[0] == '\n');

答案 1 :(得分:1)

您描述的功能称为序列化 互联网上有很多信息。 对于前参考:
Data serialization in C?

答案 2 :(得分:1)

基本上你可以。你有两个选择。

1)作为不可移植的二进制文件。

//  Writing to a file inticaded by fp ...
fwrite( &record, sizeof(struct guest), 1, fp );

// Reading from a file inticaded by fp ... 
fread( &record, sizeof(struct guest), 1, fp ); 

2)作为便携文本。

//  Writing to a file inticaded by fp ...
fprintf( fp, "%d %20s %20s", record.tel, record.name, record.country );

// Reading from a file inticaded by fp ... 
fscanf( fp, "%d %s %s", &record.tel, &record.name, &record.country );

使用第一选择(二进制),您可以直接从文件中读取,查看示例here,如果将其另存为文本,则必须逐行读取并在字段中手动提供值结构。

答案 3 :(得分:1)

如果是您第一次使用fprintf() / fscanf()而不是printf() / scanf()