gpt4 book ai didi

c - 结构数组在声明时存储垃圾

转载 作者:行者123 更新时间:2023-11-30 16:17:28 25 4
gpt4 key购买 nike

我正在创建一个包含 50 个结构的数组,并将其读入二进制文件。当我尝试打印它时,该结构的前 24 个元素显示为空,但随后开始表现奇怪(打印垃圾)。我特别希望 ID 为 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:

最佳答案

您创建文件的代码有问题:

tempadd[50] 未初始化,请将其声明为全局或使用所需的值对其进行初始化。例如如果您希望Name为空,可以执行tempadd[0].name = ""。确保初始化所有数组元素。

您还可以使用memcpy清除tempadd的所有元素。

关于c - 结构数组在声明时存储垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249217/

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