Fscanf打印所有内容,但在C中使用代码1退出程序

3qpi33ja  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(84)

我有一个函数,它可以读取这种格式的字符串:
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;
}


我很困惑,因为它打印一切正确,但程序由于某种原因失败。请帮助我。

wb1gzix0

wb1gzix01#

在初始化main函数之前,在函数中使用变量N是调用undefined behaviour,因为N的值在使用时是不确定的。
如果在(-Wall -Wextra)上编译时有警告,您可能会看到类似以下的警告。

warning: variable 'N' is uninitialized when used here [-Wuninitialized]

字符串
如果你用-Wall -Wextra -Werror编译,这将被视为一个编译错误,并且在你可以首先运行程序之前必须被修复。
你也会看到关于忽略fscanf的返回值的警告,并且-Werror已经被迫修复了这个问题。

yx2lnoni

yx2lnoni2#

我必须在调用函数之前初始化N。

相关问题