我正在为变量 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/