如何使用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将结构中的数据放入文本文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 结构化数据写入 Python 中的文本文件?

动态读取文本文件并放入 C 中的指针字符数组

将文本文件中的数据读取到结构数组中

C - 读取文件并将文本放入具有动态内存分配的字符指针

C ++将结构中的字符串保存到文本文件中

如何读取txt文件并存储在c中的结构数组中