我有一个函数试图读取文件的每一行,然后使用 sscanf 将值传递到结构数组中,为文件的每一行创建一个新结构,而不是包含字符“#”的注释行。这是我的代码:
typedef struct {
int row, col, C, D;
char program[80];
} agentDetails;
我的结构在头文件中定义,#included 在主文件中。
char currentLine[80];
char** agents;
int n=0;
agents = malloc(sizeof(char*)*4);
while (fgets(currentLine, sizeof currentLine, file) != NULL) {
if(!strchr(currentLine, '#')) {
agentDetails agents[n]; /*create new struct in array agents*/
sscanf(currentLine, "%d %d %c %s %s", &agents[n].row, &agents[n].col, &agents[n].C, agents[n].program, agents[n].D);
n++;
}
}
这可行,但是当它到达文件末尾时它不会退出循环,它会坐在那里等待输入。我尝试过使用 gdb 单步执行,在最后一行之后,它会跳转到 while(fgets...) 行,然后等待输入。
我知道如果我尝试将值扫描到函数内初始化的变量中,则此代码有效,它似乎仅在我使用结构数组时出现故障。这里发生了什么?
我已经更改了代码,所以它可以工作,见下文:
int n = 0;
int i = 0;
while (fgets(currentLine, sizeof currentLine, file) != NULL) {
if(!strchr(currentLine, '#')) {
n++;
}
}
rewind(file);
agentDetails agents[n];
while (fgets(currentLine, sizeof currentLine, file) != NULL) {
if(!strchr(currentLine, '#')) {
sscanf("same as above");
i++;
}
}
但是,我不使用 malloc。这是一个问题吗?这会导致问题吗?