gpt4 book ai didi

C - 如果结构在文件中如何保留数组

转载 作者:行者123 更新时间:2023-11-30 18:35:25 26 4
gpt4 key购买 nike

这是我到目前为止所得到的,但我实际上并没有在文件上写入。我认为我没有正确使用 fwrite()

typedef struct t_directory {
int index;
char nombre[255];
int padre;
}t_directory;

int main(void) {

t_directory* tabla[100];

int i;
for(i=0; i<100;i++){
tabla[i] = malloc(sizeof(struct t_directory));
tabla[i]->index = 0;
sprintf(tabla[i]->nombre, "");
tabla[i]->padre = 0;
}

tabla[0]->index = 0;
sprintf(tabla[0]->nombre, "root");
tabla[0]->padre= -1;

tabla[1]->index = 1;
sprintf(tabla[1]->nombre, "user");
tabla[1]->padre= 0;

FILE * file= fopen("directorios.txt", "wb");
if (file != NULL) {
fwrite(tabla[0], sizeof(struct t_directory), sizeof(struct t_directory), file);
for(i=1;i<100;i++){
if(tabla[i]->index != 0){
fwrite(tabla[i], sizeof(struct t_directory), sizeof(struct t_directory), file);
}
}
fclose(file);
}

我应该怎么做?

最佳答案

首先,该文件是二进制,因此您不应该真正能够将其作为文本读取。

其次,问题的根源在于你如何编写结构:

fwrite(tabla[0], sizeof(struct t_directory), sizeof(struct t_directory), file);

如果您读过例如this fwrite reference您将看到两个大小参数是:

  1. 数据结构的大小
  2. 数据结构的数量

第二个大小参数错误,并且每次调用 时,调用都会尝试将总共 sizeof(struct t_directory) * sizeof(struct t_directory) 字节写入文件fwrite.

正确的应该是编写一个结构:

fwrite(tabla[0], sizeof(struct t_directory), 1, file);
// ^
// Note the value one here, to write only a single structure
<小时/>

如果您不关心磁盘上的空间(这对于您的表来说是最小的),那么我建议您一次性写入整个数组。

要实现此功能,您当然需要一个对象数组而不是指针:

t_directory tabla[100];

然后您可以在一次调用中将其全部写入:

fwrite(tabla, sizeof tabla[0], sizeof tabla / sizeof tabla[0], file);

关于C - 如果结构在文件中如何保留数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46757133/

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