Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用c将结构写入文件。我有像$0@ϊ?0@_C_File Io_Struct - Fatal编程技术网

使用c将结构写入文件。我有像$0@ϊ?0@

使用c将结构写入文件。我有像$0@ϊ?0@,c,file-io,struct,C,File Io,Struct,我在文件里找到了一些奇怪的字符$0@ ϊ ?0@ 我在写结构时做错了什么? 代码: 我改变了一些事情,现在我得到了一个文件。但是我没有在文件中找到正确的npages。。。。就像“儒勒·凡尔纳0∏ώ”海下1000里格”“” 被复制的字节数是structbooks,而您从不关心存储字符串所需的字节数sizeof(struct books)只包含sizeof(指针)而不是指针所包含的字节数 您可以有一个字符数组如 char name[20]; /* some size */ char auth

我在文件里找到了一些奇怪的字符$0@ ϊ ?0@ 我在写结构时做错了什么? 代码:

我改变了一些事情,现在我得到了一个文件。但是我没有在文件中找到正确的npages。。。。就像“儒勒·凡尔纳0∏ώ”海下1000里格”“”

被复制的字节数是
structbooks
,而您从不关心存储字符串所需的字节数
sizeof(struct books)
只包含
sizeof(指针)
而不是指针所包含的字节数

您可以有一个
字符数组

char name[20]; /* some size */
char author[40]; 
现在
sizeof(struct books)
包括
sizeof(name)+sizeof(author)

您正在文件中存储结构数据的二进制表示形式。您在文件中看到的奇怪字符正是:
npages
字段的二进制表示形式。是的,它将看起来像一组奇怪的字符,就像它应该的那样

如果您想查看作为数字的人类可读(文本)表示形式存储的页数,则必须手动将其从二进制转换为文本表示形式,或者使用I/O函数来完成此操作

事实上,如果您想查看以人类可读格式表示的所有内容,则需要一个文本文件,而不是二进制文件。也就是说,您需要将其作为文本文件打开,并使用格式化输出函数写入数据

FILE *book = fopen("book.txt", "wt");
fprintf(book, "%s %d %s\n", book1.name, book1.npages, book1.author);
fclose(book);

结构有一些填充/对齐字节。这些字节未初始化。注意:在“name”和“author;”之后填充2字节;。因此,只需将这两个字段中的每个字段都延长2个字节。int字段仍然无法读取
char name[20]; /* some size */
char author[40]; 
FILE *book = fopen("book.txt", "wt");
fprintf(book, "%s %d %s\n", book1.name, book1.npages, book1.author);
fclose(book);