C:声明数组时发生访问冲突

时间:2013-06-30 00:09:45

标签: c

在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],我收到了访问冲突。

这似乎在某种程度上会导致文件读取问题,但我现在看不清楚。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

您的“访问冲突”无疑来自您的变量“n”未初始化的事实。您的sscanf(start,“%d”,& field,& n)可能没有足够的格式说明符,因此只能从该sscanf设置变量'field'。这个sscanf没有触及变量n,所以它仍未被初始化。

当您将未初始化的'n'添加到指针'start'时,最终会出现无效的地址,并最终导致访问冲突错误。