Struct Array хранит мусор при объявлении - PullRequest
0 голосов
/ 22 мая 2019

Я создаю массив из 50 структур примерно так и считываю его в двоичный файл.Когда я затем пытаюсь распечатать его, структура кажется пустой для первых 24 элементов, но потом начинает вести себя странно (печатать мусор).В частности, я хотел бы, чтобы идентификатор был равен 0, поскольку я, скорее всего, буду использовать его для тестирования.Если не считать уменьшения размера моей структуры, я ошеломлен.

Я создаю двоичный файл примерно так:

#include<stdio.h>
#include<stdlib.h>
struct record
{
   int id;
   char name[40];
   char email[50];
   char course[10];
   int grade;
};

int main ();
{
    struct record tempadd[50];
    FILE *in = fopen("records.bin", "ab");
    fwrite(tempadd, sizeof(tempadd), 1, in);
    fclose(in);
}

Я печатаю запись с этим кодом:

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

struct record
{
   int id;
   char name[40];
   char email[50];
   char course[10];
   int grade;
};

int main ()
{
    struct record record[50];
    FILE *in = fopen("records.bin", "rb");
    fread(record, sizeof(record), 1, in);

    int i;
    for (i=0; i<50; i++)
    {
       printf("Student ID: %d    ", record[i].id);
       printf("Name: %s    ", record[i].name);
       printf("Email: %s    ", record[i].email);
       printf("Course: %s    ", record[i].course);
       printf("Grade: %d\n", record[i].grade);
    }
    fclose(in);
}

Я ожидаю 50 строк:

Student I: 0    Name:     Email:     Course:     Grade: 0

Вместо этого я вижу много строк мусора, таких как:

Student ID: 1724372348    Name: =     Email: =     Course:     Grade:

1 Ответ

0 голосов
/ 22 мая 2019

Код, в котором вы создаете файл, имеет проблему:

tempadd[50] не инициализируется, либо объявите его как глобальный, либо инициализируйте его требуемыми значениями. например Если вы хотите, чтобы Name был пустым, вы можете сделать tempadd[0].name = "". Убедитесь, что вы инициализировали все элементы массива.

Вы также можете использовать memcpy для очистки всех элементов tempadd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...