我有一个正在编写的程序,我需要从平面文件中获取一行。然后我 sscanf 将数据放入结构中。这给了我非常意想不到的结果。首先,这是一个类似于我想做的工作示例。我有一个文件 department.in,如下所示:
0 something
1 else
2 more
这是一个示例程序,它运行并给出了我期望的结果:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *in;
in = fopen("department.in", "r");
char * buffer = malloc(256 * sizeof(char));
while((fgets(buffer, 256, in)) != NULL){
int index;
char* name;
sscanf(buffer, "%d %s", &index, name);
printf("\n\nIndex: %d, Name: %s.\n\n", index, name);
}
free(buffer);
return 0;
}
正如预期的那样,结果是:
Index: 0, Name: something.
Index: 1, Name: else.
Index: 2, Name: more.
但是,当我添加一个结构时,它编译得很好:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int index;
char* name;
}test;
int main(void)
{
FILE *in;
in = fopen("department.in", "r");
char * buffer = malloc(256 * sizeof(char));
while((fgets(buffer, 256, in)) != NULL){
test *mytest = malloc(sizeof(test));
sscanf(buffer, "%d %s", &mytest->index, mytest->name);
printf("\n\nIndex: %d, Name: %s.\n\n", mytest->index, mytest->name);
free(mytest);
}
free(buffer);
return 0;
}
结果不是我所期望的:
Index: 0, Name: (null).
Index: 1, Name: (null).
Index: 2, Name: (null).
显然,我的 char 做错了什么,但我终生无法弄清楚是什么。当我改变某些东西时,它甚至会出现故障。任何帮助将不胜感激!
PS这不是家庭作业。我刚刚为我的实际代码制作了一个更加简化的示例,以便在此处阅读和编译以及学习我需要的这个概念。再次感谢!