我目前正在尝试将文件加载到由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]);
最佳答案
%1s
表示一个字符,是的,但是它也以null结束字符串。您正在覆盖预期缓冲区之外的内存。 %c
是您的意思。您也不需要临时字符变量,可以直接读入结构字段。
同样,scanf
返回成功读取的字段数,因此您必须检查其为> 0(或等于4),而不是1。