0

在 main 内部,我有以下过程从文件中获取数字:

FILE *f = fopen("numbers.txt", "r");
if(f != NULL) {
    char line[BUFFER_SIZE];
    while(fgets(line, sizeof(line), f) != NULL) {
        char *start = line;
        int field;
        int n;
        while(sscanf(start, "%d", &field, &n) == 1) {
            printf("%d \n", field);
            start += n;
        }
    }
    fclose(f);
}

如果我在上面添加一个整数数组,例如 int num[100],我会遇到访问冲突。

似乎这以某种方式导致文件读取出现问题,但我目前不知道如何。

4

3 回答 3

2
sscanf(start, "%d", &field, &n)

您的函数调用有太多参数。

于 2013-06-30T00:15:19.637 回答
0
while(sscanf(start, "%d", &field, &n)

自从我完成 C 以来已经有一段时间了,但我不认为n它被填充为字符的长度。

直接从您的文件中执行 fscanf 并检查返回以查看是否有任何内容。

于 2013-06-30T00:20:51.503 回答
0

您的“访问冲突”无疑是由于您的变量“n”没有被初始化。您的 sscanf(start, "%d", &field, &n) 可能没有足够的格式说明符,因此仅从该 sscanf 设置了变量 'field'。此 sscanf 未触及变量 n,因此它仍未初始化。

然后,当您将此未初始化的“n”添加到指针“开始”时,您最终会得到一个无效的地址,并最终导致您的访问冲突错误。

于 2013-06-30T00:23:09.253 回答