сбои?Надеюсь, не те заявления, если файла нет вообще.Это может привести к сбою, если вы предполагаете, что в вашем массиве есть десять допустимых элементов, поскольку поля name
, вероятно, не будут корректными строками C.
num = fread(books, sizeof(struct stock), 10, fptr);
, хотя я бы предпочел:
num = fread (book, sizeof(*book), sizeof(book) / sizeof(*book), fptr);
, поскольку это означает, что вам не нужно менять много кода в случае изменения имени типа или размера массива.
Если возможно, что файл даже не открывается, вам нужно также проверить возвращаемое значение fopen
.Полный код будет выглядеть примерно так:
#include <stdio.h>
typedef struct {
char name[31];
int stock;
} tStock;
int main (void) {
tStock book[10];
size_t num, i;
FILE *fptr = fopen ("stock.dat", "rb");
if (fptr == NULL) {
num = 0;
} else {
num = fread (book, sizeof(*book), sizeof(book) / sizeof(*book), fptr);
fclose (fptr);
}
printf ("Read %d items\n", num);
for (i = 0; i < num; i++) {
printf (" Item %d is %s, %d\n", book[i].name, book[i].stock);
}
return 0;
}