C:fscanf导致未经初始化的变量错误

时间:2013-09-10 20:03:52

标签: c file io scanf

我正在尝试从snack.dat文件中删除信息,但是会收到此错误。

警告:'fido_speed'可能在此函数中未初始化使用[-Wuninitialized] |

以及其余的int *声明。

“Snack.dat”

10 20 5 15
19 20 20 20
1 50 1 51
10 20 10 20
0 0 0 0

代码

int main()
{
    FILE* input;
    FILE* output;

    const char* in_file="snack.dat";
    const char* out_file="snack.out";

    int* fido_speed;
    int* joe_speed;

    int* fido_distance;
    int* joe_distance;

    input = fopen(in_file,"r");
    output = fopen(out_file,"w");

    while(!feof(input)){

       fscanf(input,"%d %d %d %d", joe_distance, fido_distance, joe_speed, fido_speed);

        if (((*joe_distance)/(*joe_speed)) < ((*fido_distance)/(*fido_speed))){
            fprintf(output,"Fido is no longer hungry.");
        }

        else if(((*joe_distance)/(*joe_speed)) > ((*fido_distance)/(*fido_speed))){
            fprintf(output,"Joe makes it.");
        }

        else{
            fprintf(output,"/0");
        }
    };

    fclose(input);
    fclose(output);
    return 0;
}

2 个答案:

答案 0 :(得分:3)

糟糕!你的指针没有分配任何存储空间(因此“未初始化”):

int* fido_speed;

是指针,它保存int类型的地址(或者,如果未初始化,则保存垃圾/虚假地址)。但是,它不包含它指向的int的值。为此,您需要malloc()一些内存,或者将其指向现有的int。

在这种情况下,将普通int的地址传递给scanf可能更容易:

int fido_speed;  // not a pointer
fscanf(input, "%d", &fido_speed);

答案 1 :(得分:2)

错误信息非常明显:您正在使用未初始化的指针,因此您正在将数据读入内存的随机部分。您应该使用int个变量而不是int*个商店,并使用&获取指针。