我有一个.map文件,其中包含我想要的struct中的一些数据。 .map文件中的输入示例。
AY〜÷> ÷> +.ØæKL÷> C.ÐB。'?zlÈ)/ @ø> àý~÷> €+ / U÷> €; - ¥ÚkmþÿÿÿÐB.yH@ O&GT。 ƒ@€÷>
struct student {
char *id;
char name[20];
int age;
};
int main() {
char * buffer;
FILE *fptr;
struct student stud[100];
fptr = fopen("input.map", "wb+");
fread(stud, sizeof(stud), 1, fptr);
for (int i = 0; stud[i].id != NULL; ++i)
{
printf("Name: %s \n", stud[i].name);
printf("Age: %s", stud[i].age);
}
fclose(fptr);
system("pause");
}
然而,输出是一堆用于打印名称的字符... ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
用于打印学生的年龄 -858993460 -858993460 -1533994631 我不知道出了什么问题。
如果我的方向错误,请纠正我。这种语言很新。提前谢谢。
答案 0 :(得分:1)
由于您的输入似乎没有任何可读性,我认为您必须首先验证您写文件的方式。
如果您使用fwrite
输出struct student
,它会将内存的直接内容输出到文件。指针char *
将作为指针值输出(长度取决于您的系统详细信息),固定数组char ...[20]
应按原样输出,同样也应输出整数。
您可以在文件中输出char *
字符串,但请确保包含标记字符串结尾的零分隔符。
由于char *
内容的长度可能会有所不同,因此您无法使用带结构的简单fread
读取内容。读取字符串,然后根据字段类型逐字段读取。
或者,您可以重新组织数据。
输出和输入二进制数据时,使用简单的示例文件并使用十六进制编辑器或十六进制转储检查它们会非常有用;还包括数据的十六进制转储而不是字符串可以提倡更准确的答案。