如何使用c将结构中的数据放入文本文件?
Posted
技术标签:
【中文标题】如何使用c将结构中的数据放入文本文件?【英文标题】:How to put data in structure into text file using c? 【发布时间】:2021-02-01 13:48:44 【问题描述】:假设我有一个结构,它看起来像这样:
struct profile
char firstName[15], lastName[15];
int age, phoneNo;
;
我有这样的代码
int main()
FILE *fPtr;
fPtr=fopen("profile.txt", "w");
printf("\n\nPlease enter your details:");
struct profile c;
printf("\n\nEnter your first name: ");
gets(c.firstName);
printf("\nEnter your last name: ");
gets(c.lastName);
printf("\nEnter your age: ");
scanf("%d", &c.age);
printf("Enter your phone number: ");
scanf("%d", &c.phoneNo);
fclose(fPtr);
return 0;
如何将这种结构中的数据放入文本文件中,以便将来可以搜索特定的配置文件?此外,我对 C 非常陌生,所以如果有人能向我解释这是否可行以及如何实现,我将不胜感激。
【问题讨论】:
【参考方案1】:将字符串打印到文件时,请务必记住字符串终止符'\0'
将导致无法显示的内容。所以你应该避免一个一个地写字符串。
另一个可能的问题是,使用fwrite
将整数写入...作为整数,这意味着它使用包含实际值的 4 个字节存储。例如值 72 将被存储为
0x48 0x00 0x00 0x00
将显示字母H
后跟三个空字符。因此,您还必须将数字显示为字符串。
我建议使用fprintf
。它像printf
一样工作,但它写入文件而不是stdout
。在以下示例中,每个字段都写在不同的行中,双换行符结束当前记录:
fprintf (fPtr, "%s\n%s\n%s\n%s\n%d\n%d\n\n",
firstName, lastName, custID,
healthHistory, age, phoneNo);
注意:gets
已弃用,因为它不执行任何字符串长度检查。因此,例如,如果您提供 firstName
20 个字符长,超出的字符将超出该字段的大小,覆盖下一个。请记住,大小为 N 的 char 数组最多包含一个字符串 N-1
个字符长(字符串终止符需要一个字符)。
我建议改用fgets
:
fgets (c.firstName, 15, stdin);
最多将读取 15 个字符,包括 字符串终止符(包括从命令行发送以终止输入的尾随换行符。如果您不这样做,您将拥有to remove it需要)。
【讨论】:
这有帮助。非常感谢你,祝你有美好的一天! :) 你知道如何删除尾随的新行吗? @cmy 当然!无需重新发明***:只需阅读这篇精彩的 answer。我也会编辑我的答案以上是关于如何使用c将结构中的数据放入文本文件?的主要内容,如果未能解决你的问题,请参考以下文章