我目前正在尝试将文件加载到由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。

08-04 16:33