提问人:Azizbek Sattorov 提问时间:11/2/2023 更新时间:11/2/2023 访问量:51
Fscanf 打印所有内容,但退出程序,代码为 1 在 C 中
Fscanf prints everything but exits program with code 1 in C
问:
我有这个函数,它以这种格式读取一些字符串:
2 伦敦 柏林 220 1.5
伦敦 米兰 280 2.5
...
同样的东西应该再读一遍......
2 是其自身后面的字符串数。为此,我有以下功能:
void allocate_info(FILE* fptr, info_t* cities_info, int N){
int tmp_flights;
int i = 0;
while(fscanf(fptr, "%d", &tmp_flights) == 1){
printf("%d\n", tmp_flights); // this print!!!
char tmp_departure[LENGTH], tmp_arrival[LENGTH];
int tmp_price;
float tmp_duration;
for(int i = 0; i < tmp_flights; i++){
fscanf(fptr, "%s %s %d %f", tmp_departure, tmp_arrival, &tmp_price, &tmp_duration);
strcpy(cities_info[i].departure, tmp_departure);
strcpy(cities_info[i].arrival, tmp_arrival);
cities_info[i].price = tmp_price;
cities_info[i].duration = tmp_duration;
}
}
}
“This Print!!”实际上打印了所有数字,但最终程序失败(错误 1)。这是我的主要功能:
int main(void) {
FILE* fptr = fopen("D:/ap2/lab02ex01/file.txt", "r");
int N;
info_t* cities_info = (info_t*)malloc(sizeof(info_t) * N);
N = read_number_of_cities(fptr); // some other function
allocate_info(fptr, cities_info, N); // ERROR HERE?!?
return 0;
}
我对此感到非常困惑,因为它可以正确打印所有内容,但由于某种原因程序失败。请帮帮我。
答:
0赞
Azizbek Sattorov
11/2/2023
#1
在调用函数之前,我必须初始化N。
2赞
Chris
11/2/2023
#2
在初始化函数之前在函数中使用变量会调用未定义的行为,因为 的值在使用它时是不确定的。N
main
N
如果在 () 上使用警告进行编译,则会看到如下所示的警告,以及其他警告。-Wall -Wextra
warning: variable 'N' is uninitialized when used here [-Wuninitialized]
如果你用它进行编译,就会被视为编译错误,并且必须在你首先运行程序之前得到修复。-Wall -Wextra -Werror
您还会看到有关忽略 的返回值的警告,并被迫修复该问题。fscanf
-Werror
评论
N
sizeof(info_t) * N
N=
info_t* cities_info
allocate_info()
N
read_number_of_citites()
fptr
allocate_info()
N
tmp_flights
fscanf