使用 c 将结构写入文件。我有像 $0@ ϊ ?0@ 这样的字符
writing structs to files with c. i got characters like $0@ ϊ ?0@
我在文件中加入了一些奇怪的字符... $0@ ϊ ?0@
我在编写结构时做错了什么?
代码:
int main (){
struct books {
char name[30];
int npages;
char author[30];
} book1;
book1.name = "1000 leagues under the sea";
book1.npages = 250;
book1.author = "Jules Verne";
FILE *book;
book = fopen("book.txt", "wb");
/* trying to write the struct books into a file called book.txt */
fwrite( &book1, sizeof(book1), 1, book);
fclose(book);
return 0;
}
我更改了一些东西,现在我写了一个文件。但我没有在文件中找到正确的 npages....这就像 "Jules Verne 0@ Πώ" ϊ 1000 leagues under sea ”” “
sizeof(struct books)
被复制的字节数是struct books
,您永远不会关心存储字符串所需的字节数。 sizeof(struct books)
将只包括 sizeof(pointers)
而不是指针持有的字节数。
你可以char array
喜欢
char name[20]; /* some size */
char author[40];
现在 sizeof(struct books)
包括 sizeof(name) + sizeof(author)
您正在文件中存储结构数据的二进制 表示。您在文件中看到的奇怪字符就是:npages
字段的二进制表示。是的,它看起来像一组奇怪的字符,就像它应该的那样。
如果您想查看存储为数字的人类可读(文本)表示形式的页数,您必须手动将其从二进制表示形式转换为文本表示形式或使用 I/O 函数即可给你的。
事实上,如果您想查看以人类可读格式表示的所有内容,您需要一个文本文件,而不是二进制文件。 IE。您需要将其作为文本文件打开并使用格式化输出函数写入数据。
FILE *book = fopen("book.txt", "wt");
fprintf(book, "%s %d %s\n", book1.name, book1.npages, book1.author);
fclose(book);
我在文件中加入了一些奇怪的字符... $0@ ϊ ?0@ 我在编写结构时做错了什么? 代码:
int main (){
struct books {
char name[30];
int npages;
char author[30];
} book1;
book1.name = "1000 leagues under the sea";
book1.npages = 250;
book1.author = "Jules Verne";
FILE *book;
book = fopen("book.txt", "wb");
/* trying to write the struct books into a file called book.txt */
fwrite( &book1, sizeof(book1), 1, book);
fclose(book);
return 0;
}
我更改了一些东西,现在我写了一个文件。但我没有在文件中找到正确的 npages....这就像 "Jules Verne 0@ Πώ" ϊ 1000 leagues under sea ”” “
sizeof(struct books)
被复制的字节数是struct books
,您永远不会关心存储字符串所需的字节数。 sizeof(struct books)
将只包括 sizeof(pointers)
而不是指针持有的字节数。
你可以char array
喜欢
char name[20]; /* some size */
char author[40];
现在 sizeof(struct books)
包括 sizeof(name) + sizeof(author)
您正在文件中存储结构数据的二进制 表示。您在文件中看到的奇怪字符就是:npages
字段的二进制表示。是的,它看起来像一组奇怪的字符,就像它应该的那样。
如果您想查看存储为数字的人类可读(文本)表示形式的页数,您必须手动将其从二进制表示形式转换为文本表示形式或使用 I/O 函数即可给你的。
事实上,如果您想查看以人类可读格式表示的所有内容,您需要一个文本文件,而不是二进制文件。 IE。您需要将其作为文本文件打开并使用格式化输出函数写入数据。
FILE *book = fopen("book.txt", "wt");
fprintf(book, "%s %d %s\n", book1.name, book1.npages, book1.author);
fclose(book);