我目前正在尝试将文件加载到由3个字符和1个整数组成的结构中。程序应该从数据文件中读取并将每一行插入到结构的元素中。前3个属性是该行的前3个字符,然后跳过该空格并将下一个字符(无论长度)插入为整数。
我能够编译程序,但它不会运行。经过一些测试,我注意到程序不会只运行fscanf()。我不知道把.dat文件放在哪里,所以我把它放在与exe相同的文件夹中。
数据的一个例子:
ABC 22
CDD 32
这是我的.c文件:
void LoadGeneticCode(char *filename, codon c[]){
FILE *file = fopen(filename, "r");
int i = 0;
while(fscanf(file, " %c%c%c %d", &c[i].b1,&c[i].b2,&c[i].b3,&c[i].a) > 0){
printf("%s \n",c[i].b1);
i++;
}
fclose(file);
}
.h文件:
typedef struct { char b1,b2,b3; int a;} codon;
void LoadGeneticCode(char *filename, codon c[64]);
答案 0 :(得分:1)
%1s
表示一个字符,是的,但它也是null终止字符串。您正在覆盖预期缓冲区之外的内存。 %c
就是你的意思。您也不需要临时字符变量,可以直接读入结构字段。
同样scanf
会返回成功读取的字段数,因此您的检查必须是> 0(或仅等于4),不等于1.