写struct +只保存指针?

胡安

我在变量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您将必须分配一个stringas作为例如,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章