使用fwrite()将结构写入文件

me4*_*e45 6 c struct file fwrite

我有以下程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLEN 100

typedef struct {int key; char data[MAXLEN];} record;

main(int argc, char *argv[])
{
    int n, i;
    record x;
    FILE *fp;
    fp = fopen(argv[1], "w+");
    printf("How many records will be entered? \n");
    scanf("%d", &n);
    for (i=0; i<n; i++)
    {
        printf("Enter record: \n");
        scanf("%d", &x.key);
        scanf("%s", &x.data);
        fwrite(&x, sizeof(record), 1, fp);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在做的是从用户输入创建记录,然后将这些"记录"存储到文件中.但是,当我使用fwrite()时,创建的文件中会写入许多奇怪的字符,而不是简单地让每条记录都包含其键和数据.有人能告诉我为什么写这些奇怪的人物吗?

MJZ*_*MJZ 4

几个原因:

  1. 当您使用 scanf 时,它将人类可读的形式 (%d) 转换为计算机直接使用的形式 (int)。然后将计算机可读的形式写入文件中。现在,当您查看该文件时,您使用的不是计算机到人类可读的逆形式,而是更低级别的形式。这会给你一些看起来错误的东西。
  2. 即使您可能已将部分数据读入其中(例如,读取长度为 10 的字符串),您仍会写出整个 x.data。x.data 的其余部分是“未初始化的”,包含调用 main() 时内存中剩余的内容。