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

标签 c

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

相关文章:

c - 为什么C在调用汇编函数时不将指针压入堆栈?

c - 简单C程序中的总线错误

冲突的类型,当它们都为空时

c - 为什么 c 允许在不声明的情况下初始化字符串?

c - 如何将管道中前一个程序的输出正确发送到下一个程序?

c++ - 递归函数的内存分配

c++ - 如果 f 修改 x,x*f(x) 的值是否未指定?

c - 当 DPI 设置为 150% 时关闭 Aero (Windows 7),全屏窗口仅覆盖任务栏

c - 无法绕过 gcc 的 -Wconversion

c - 将变量传递给函数并更改其全局值