使用 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);