У меня была проблема с указателями. Я хочу прочитать двоичный файл с функцией, а затем использовать прочитанные данные в основном. Проблема в том, что мне пришлось передать указатель на массив структуры, чтобы использовать данные в основном.Указатель на массив функции struct в функции
Код:
#define TMOLDEO 8
#define TAM 41
struct fichpiezas{
int codPieza;
float dimPieza;
float costePieza[TMOLDEO];
};
int leer_fichero(struct fichpiezas *vpiezas[]);
int main(int argc, const char * argv[]) {
struct fichpiezas vpiezas[TAM];
leer_fichero(&vpiezas);
for(int i = 0; sizeof(vpiezas)/sizeof(struct fichpiezas); i++){
printf("Codigo pieza : %d\n", vpiezas[i].codPieza);
}
return 0;
}
int leer_fichero (struct fichpiezas *vpiezas[]){
FILE *fich;
struct fichpiezas pieza;
int error_dev = 0, i = 0;
if ((fich = fopen("piezas.bin", "rb")) == NULL){
printf ("Error en apertura del fichero para lectura \n ");
error_dev = 1;
} else{
//Bucle mientras no sea fin de fichero
while (! feof(fich)){
fread (&pieza, sizeof(pieza), 1, fich);
vpiezas[i] = &pieza;
i++;
}
fclose (fich);
}
return error_dev;
}
код/комментарии на английском языке, как правило, упрощается чтение, но 'pieza' в 'leer_fichero' имеет локальное хранилище, и вы просто продолжаете помещать этот адрес в свой массив, и этот объект будет недоступен после завершения функций. – crashmstr
Эта строка: 'for (int i = 0; sizeof (vpiezas)/sizeof (struct fichpiezas); i ++) {' в main() имеет проблему. он никогда не выходит из цикла for, потому что вычисление всегда одно и то же. предположим: 'for (int i = 0; i <(sizeof (vpiezas)/sizeof (struct fichpiezas)); i ++) {' Примечание: значение вычисления всегда будет «TAM» – user3629249
: 'while (! feof (fich)) {'не будет работать так, как ожидалось, потому что feof() не определяется до тех пор, пока операция чтения из файла fich не предложит использовать:' while (fread (& pieza, sizeof (pieza), 1, fich)) 'fread вернет третий параметр при успехе и (в этом случае) 0, когда произойдет сбой/EOF. – user3629249