C将文件中的数据加载到struct compiles中,但在运行时崩溃

时间:2015-11-17 19:25:55

标签: c struct

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

1 个答案:

答案 0 :(得分:1)

%1s表示一个字符,是的,但它也是null终止字符串。您正在覆盖预期缓冲区之外的内存。 %c就是你的意思。您也不需要临时字符变量,可以直接读入结构字段。

同样scanf会返回成功读取的字段数,因此您的检查必须是> 0(或仅等于4),不等于1.