0

我正在尝试从snack.dat 文件中添加信息,但出现此错误。

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

对于其余的 int* 声明,依此类推。

“小吃.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;
}
4

2 回答 2

3

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

int* fido_speed;

是一个指针,它保存一个int类型的地址(或者,如果未初始化,一个垃圾/虚假地址)。但是,它不保存它指向的 int 的值。为了做到这一点,你需要malloc()一些内存或者将它指向一个现有的 int。

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

int fido_speed;  // not a pointer
fscanf(input, "%d", &fido_speed);
于 2013-09-10T20:08:06.463 回答
2

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

于 2013-09-10T20:05:41.233 回答