gpt4 book ai didi

c - 害怕保存特定的单词?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:35 28 4
gpt4 key购买 nike

我必须完成这个练习:我必须从一个通用的文本文件中读取,因此组成:[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**。

关于c - 害怕保存特定的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35211199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com