指针数组——从文件中读取——崩溃



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

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

这是我写的,但每次函数nactiProdukty (readProductsfromFile)结束时,它崩溃了一个错误:First-chance exception at 0x73006500 in ConsoleApplication3.exe: 0xC0000005: Access violation executing location 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手册页:

格式中转换规格的数量超过指针的数量参数,结果是未定义的。

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

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

相关内容

  • 没有找到相关文章

最新更新