fscanf将输出写入变量的索引中

fscanf将输出写入变量的索引中,c,gcc,ubuntu-12.04,scanf,gcc4.6,C,Gcc,Ubuntu 12.04,Scanf,Gcc4.6,我正试图编写一个c程序来监控处理器的温度。 为了测试我的程序,我使用fscanf从文件中读取整数。令我惊讶的是,这在某些条件下不起作用。 我正在使用以下代码: #include <stdio.h> #define CORECOUNT 3 int main() { int c=0; int core[CORECOUNT]={0}; FILE *cmd[CORECOUNT]; for (c=0; c<=CORECOUNT; c++) //rea

我正试图编写一个c程序来监控处理器的温度。 为了测试我的程序,我使用fscanf从文件中读取整数。令我惊讶的是,这在某些条件下不起作用。 我正在使用以下代码:

#include <stdio.h>
#define CORECOUNT 3
int main()
{
    int c=0;
    int core[CORECOUNT]={0};
    FILE *cmd[CORECOUNT];
    for (c=0; c<=CORECOUNT; c++)    //read input and store it in 'core'
    {
        cmd[c]=fopen("testinput", "r");
        printf("c=%d\n", c);
        fscanf(cmd[c], "%d", &core[c]);
        printf("core[c]=%d, z=%d\n", core[c], c);
        fclose(cmd[c]);
    }
    for (c=0; c<=CORECOUNT; c++)   //print input
    {
        printf("core%d: %d ", c, core[c]);
    }
    printf("\n");
}
出现分段错误是因为fclose试图关闭不存在的cmd[42]

当使用“CORECOUNT”的其他值(如4)时,一切正常。但是,当使用以“11”作为二进制最后两位数字的数字(例如3、7、11、15等)时,程序将崩溃。当声明另一个整数并将其设置为“0”时,如果“CORECOUNT”的值的最后两位是二进制的“11”,则程序将按预期工作。如果不是这种情况,“core”有时会得到奇怪的值(例如“15274000”,它在每次执行程序时都不相同)

奇怪的是,这只发生在gcc 4.6.3中,而不是gcc 4.8中

我的代码中的错误在哪里?或者它甚至是编译器中的某个东西(我非常怀疑)

现在,我将声明另一个变量('tmp'),并在调用fscanf时将其用作索引:

printf("c=%d\n", c);
tmp=c;
fscanf(cmd[c], "%d", &core[tmp]);

如果有任何拼写/语法错误,我很抱歉;英语不是我的母语。

在for循环中,更改
c
printf("c=%d\n", c);
tmp=c;
fscanf(cmd[c], "%d", &core[tmp]);