c - memcpy boolean 值到 void *

标签 c boolean memcpy void-pointers

我只是创建一个测试函数,其中我必须在 void * 中传递 boolean 值,以便我可以在其他函数中解析它并使用它。

但我被困住了,无法知道我应该如何 memcpy void * 中的 boolean 值。

但是当我在另一个函数中解析它时,我总是得到 true 值。

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

typedef struct {
    int a;
    uint8_t var_data[];
} s;

void parse(s * dummy)
{
    void *var_data = dummy->var_data;
    
    uint8_t *len;
    char type[128];
    bool *leaf;
    for(int i = 0; i < dummy->a; i++)
    {
        len = (uint8_t *)var_data;
        var_data += 1;
        memcpy(type, var_data, *len);
        type[*len] = '\0';
        var_data += *len;
        leaf = (bool *)var_data;
        var_data += 1;
        
        printf("%s\n", type);
        printf("leaf: %s\n\n", leaf ? "true" : "false");
    }
}

int main() 
{
    // Write C code here
    char val[] = "dummy value";
    uint8_t len = strlen(val);
    bool v = false;
    int b = 2;
    int sz = sizeof(s) + b * (sizeof(bool) + len + 1);
    s * dummy = (s *) malloc(sz);
    dummy->a = b;
    void *var = dummy->var_data;
    for(int i = 0; i < dummy->a; i++){
        memcpy(var, &len, 1);
        var += 1;
        memcpy(var, val, len);
        var += len;
        memcpy(var, &v, sizeof(bool));
        var += sizeof(bool);
    }
    parse(dummy);
    return 0;
}

body 可以帮我解决这个问题吗?

最佳答案

var_data 未初始化。您应该使用malloc分配var_data,并将leaf中的数据复制到其中:

void *var_data = malloc(sizeof(bool));
bool leaf = false;
memcpy(var_data, &leaf, sizeof(bool));

您可以将其转换为 bool *,如下所示:

bool *leaf;
leaf = (bool *) var_data;

此外,您还可以增加 var_data 指针。因此 var_data 现在指向不同的内存位置。

关于c - memcpy boolean 值到 void *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64537909/

相关文章:

c - 用 C 语言调整输出终端的大小

c - C 中小写到大写和大写到小写

c - 开关盒奇怪的范围

c++ - 递归和返回 boolean 值

function - 传递给函数的 boolean 值未按预期工作

C 奇怪的数组行为

c - C中的链表实现(只打印最后两个节点)

java - 我必须做一个 Java 挑战,将真/假值显示为 1 和 0

c - 尝试仅使用 C 复制结构中的 C 字符串

c - 发送以太网数据包时额外填充?