gpt4 book ai didi

c - 在c中哪里以及如何使用fwrite函数

转载 作者:行者123 更新时间:2023-11-30 21:31:54 25 4
gpt4 key购买 nike

我只是无法理解 fwrite 函数在 c 中的工作原理。我编写了一个 c 程序。在这里:-

#include <stdio.h>

int main()
{
struct books
{
char name[100];
float price;
int pages;
}book1;

puts("enter the name of the book");gets(book1.name);
puts("enter the price of the book");scanf("%f",&book1.price);
puts("enter the pages of the book");scanf("%d",&book1.pages);

FILE *b=fopen("Book.txt","w");
fwrite(&book1,sizeof(book1),1,b);
}

这是程序的输入:-

 $ ./a.out 
enter the name of the book
Voldemort the last BSD user
enter the price of the book
40000
enter the pages of the book
34

这是文件的内容:-

 $ cat Book.txt 
Voldemort the Great Linux and bsd user!����c����@�@��,B

那么我的程序有什么问题吗? fwrite 是如何工作的?我什么时候应该使用它?

最佳答案

除了使用gets()之外,您的程序没有立即出现任何问题,这是非常错误(肯定是缓冲区溢出),但与你的问题,所以我只是在这里留下提示:使用 fgets() ,有关如何可靠地在 C 中获取输入的一般信息,我建议阅读

至于您的问题,fwrite() 会将您提供的任何内容写入文件,其方式与计算机内存中的方式完全相同。您可以使用 fread() 再次读取同一个文件,并最终得到相同的 struct。但请注意数据类型的表示是实现定义的。因此,您无法在不同的机器上读取此文件,甚至无法在同一台机器上使用不同的编译器编译的程序读取该文件。因此,使用fwrite()来写入整个struct在实践中的用途非常有限。

至于为什么你会在 cat 中看到“奇怪的东西”,那只是因为 cat 将所有文件内容解释为字符。如果您直接将 floatint 写入 stdout,而不是格式化,您会看到相同的结果与printf()

要将struct以可移植的方式写入文件,您必须应用某种数据序列化。一种非常简单的方法是将 fprintf() 与合理的格式字符串一起使用。有很多可能性可以做到这一点,例如,您可以使用 JSON 格式和适当的 JSON 库,XML 也是如此。

关于c - 在c中哪里以及如何使用fwrite函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45504508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com