我在变量n0中为struct节点分配空间。我使用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
。您将必须分配一个string
as作为例如,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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句