gpt4 book ai didi

c - 写结构+只保存指针?

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:58 25 4
gpt4 key购买 nike

我正在为变量 n0 中的结构节点分配空间。我使用 fwrite 将这个结构保存到文件中,但是很多人说我只保存了指向 ustr 的指针。但是我需要保存字符串 ustr,你能帮忙吗?

typedef struct {
unsigned char * ustr;
int height;
}node;

void node_init(node * n, int r) {

int i;
n->ustr = malloc((r + 1) * sizeof(unsigned char));
for (i = 0; i < r; i++) {
(n->ustr)[i] = random() & 0xff;
}
(n->ustr)[r] = 0;
n->height = -1;
}
void node_destroy(node * n) {
free(n->ustr);
n->height = -1;
}

int main() {
FILE* file_ptr = fopen("file1", "w+");
node n0;
node_init(&n0,2);
fwrite(&n0, sizeof(node), 1, file_ptr);
fclose(file_ptr);
node_destroy(&n0);
return 0;
}

最佳答案

sizeof(node) 是错误的,因为它使用的是 int 的大小和 pointer 的大小,而不是字符串。您将不得不分配一个 string 作为例如unsigned char ustr[10] 或动态分配字符串,但使用您分配的字符来查找大小并提供指向 fwrite 的字符串指针。

如果您静态分配字符串,这应该有效:

fwrite(&n0, sizeof(node), 1, file_ptr);

否则,如果你动态分配字符串,你应该这样做:

fwrite(&(n0 + sizeof(unsigned char *)), sizeof(int), 1, file_ptr);
fwrite(n0.ustr, length_node, 1, file_ptr);

或更好:

fwrite(&n0.height, sizeof(int), 1, file_ptr);
fwrite(n0.ustr, length_node, 1, file_ptr);

关于c - 写结构+只保存指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877131/

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