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