gpt4 book ai didi

c - 指针数组 - 从文件读取 - 崩溃

转载 作者:行者123 更新时间:2023-11-30 15:52:37 25 4
gpt4 key购买 nike

你能指出我做错了什么吗?

我正在尝试编写一些代码,从文本文件中读取数据并将这些数据保存到指向结构的指针数组中。重要的是我不使用任何全局标识符。

这是我写的,但每次函数 nactiProdukty (readProductsfromFile) 结束时,它都会崩溃并出现错误:ConsoleApplication3 中 0x73006500 处的首次机会异常。 exe: 0xC0000005: 访问冲突执行位置 0x73006500。但从文件中读取似乎工作正常。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct produkt {
char jmeno[20];
int mnozstvi;
int cena;
} tProdukt;


int SpoctiProdukty();
int Generuj(int min, int max);
void nactiProdukty(tProdukt **pole);


void main(){
tProdukt **pole=NULL;

int i;

srand(time(NULL));
nactiProdukty(pole);

printf("test");
scanf("%s");
}

int SpoctiProdukty(){
FILE *data=fopen("data.txt","r");
int count=0;
while(fscanf(data,"%s %d") != EOF){
count++;
}
fclose(data);
return count;
}

int Generuj(int min, int max){
return (rand()%(max-min)+min);
}

void nactiProdukty(tProdukt **pole){
FILE *data=fopen("data.txt","r");
int temp;
int i;
char temps[20];
int pocet=SpoctiProdukty();
//tProdukt **pole;

pole=(tProdukt**)malloc(sizeof(tProdukt*)*pocet);
for (i = 0; i < pocet; i++) {
pole[i]=(tProdukt*)malloc(sizeof(tProdukt));
}

for (i = 0; i < pocet; i++) {
fscanf(data,"%s %d",temps,&temp);
strcpy((*pole[i]).jmeno,temps);
(*pole[i]).cena=temp;
(*pole[i]).mnozstvi=Generuj(10,150);
}
}

最佳答案

线路

while(fscanf(data,"%s %d") != EOF){

是错误的。来自 fscanf手册页:

If the number of conversion specifications in format exceeds the number of pointer arguments, the results are undefined.

崩溃是一种有效且常见的未定义结果。您可以通过为 fscanf 提供要写入的变量,然后忽略结果来解决此问题:

int i;
char s[20];
while(fscanf(data,"%s %d", s, i) == 2){

关于c - 指针数组 - 从文件读取 - 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14278673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com