gpt4 book ai didi

c - 如何在结构中 fwrite() 两种不同类型的变量?

转载 作者:行者123 更新时间:2023-11-30 14:39:25 24 4
gpt4 key购买 nike

我想将“结构类”类型的数组(定义如下)添加到文件中。例如,如果 allClasses[0].title 等于“Math”并且 allClasses[0].class_id 等于 1,我希望该文件具有输入以下内容:

1数学/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0

如果添加了另一个标题为“科学”的类(class),那么该文件现在应该为“

1数学/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/02科学/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0

似乎发生的情况是,虽然代码会捕获结构的 char 数组部分(示例中的数学/科学),但它在处理 int 时会遇到麻烦,而是在其位置打印出垃圾(以及垃圾通常长于 1 个字符/1 个整数)。

根据经验,当使用带有仅为字符数组的变量的结构时,代码格式(当然需要进行一些调整)工作得很好。然而,当使用整数时,它会出现故障。这是因为 ASCII 转换还是类似的原因?如何调整代码以便获得包含 int 和 char 数组的输入?

void addClasses(char *given_title) {

FILE *fp;
fp = fopen("classes.db", "r");

if (numClasses == 0 && fp != NULL) {
findClasses();
}

strcpy(allClasses[numClasses].title, given_title);
allClasses[numClasses].class_id = numClasses + 1;
numClasses++;

fclose(fp);

fp = fopen("classes.db", "w");

for (int i = 0; i < numClasses; i++) {
struct classes *object = malloc(sizeof(struct classes) - 1);
memset(object, 0, sizeof( struct classes ));

object->class_id = allClasses[i].class_id;
strcpy(object->title, allClasses[i].title);

fseek(fp, numClasses * (sizeof(struct classes) - 1), SEEK_END);
fwrite(object, sizeof(struct classes) - 1, 1, fp);
}
fclose( fp );
}

结构:

struct classes {
int class_id;
char title[30];
};

代码中某些组件的一些额外(可能不必要)背景:方法开头的位尝试读取文件并开始使用已放入文件中的任何结构填充数组在启动程序之前。我没有包含相应的代码,因为即使我有一个新的classes.db 文件(因此,即使 findClasses() 从未运行),也会发生上述故障。

顺便说一句,小记:我无法将 class_id 更改为 char/char 数组。它必须是一个 int。

最佳答案

如果想以文本形式添加:

fprintf(fp, "%d,\"%s\"\n", object -> class_id, object -> title);

当您使用“w”打开文件时,您将创建新的空文件。当您写入文件时,您确实需要 fseek。

如果您想附加到现有文件,请使用“a”或“a+”。

关于c - 如何在结构中 fwrite() 两种不同类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56098775/

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