我正在尝试从snack.dat文件中删除信息,但是会收到此错误。
警告:'fido_speed'可能在此函数中未初始化使用[-Wuninitialized] |
以及其余的int *声明。
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;
}
答案 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*
个商店,并使用&
获取指针。