Fread_s 保存特定单词?

Fread_s to save specific word?

我必须完成这个练习: 我必须从一个通用的文本文件中读取,因此组成: [Nameperson][space][age],我必须将姓名(char)和年龄(unsigned int)保存在结构中。

我的问题是: 我不明白名字和年龄怎么划分,就是如果我用一个fread_s,这样

fread_s(pp->name, 256, 1, 256, f);

程序将我保存为 name es。

Pippo 25iiiiiiiiiiiiiiiiiiiiiiiiii...

我知道 fread_s 函数会保持读取的最后一个字母的位置,但我不知道如何利用它来发挥我的优势 . 这是我的代码

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

struct person{
    char name[256];
    unsigned int age;
};

void person_read(FILE *f, struct person* pp) {
    fread_s(pp->name, 256, 1, 256, f);
}

谢谢。

你用错了功能,你需要fscanf()

int
person_read(FILE *file, struct person *person)
{
    // Warning: if names contain spaces "%255s%d" will not work
    if (fscanf(file, "%255s%d", person->name, person->age) != 2)
    {
        fprintf(stderr, "warning: invalid read!\n");
        return -1;
    }
    return 0;
}

这样使用

struct person person;
if (person_read(file, &person) != 0)
    do_somethin_read_error();
else
    fprintf(stderr, "%s has %d years\n", person.name, person.age);

您的代码产生该输出的原因是因为您正在将文件中的所有字节(或仅 256)读入 person->name,并且由于 person->name 不是 null 终止,将它传递给 printf() 会产生您看到的输出并且是 *Undefined Behavior**。