【发布时间】:2020-10-26 13:17:14
【问题描述】:
我只是在创建一个测试函数,我必须在 void * 中传递布尔值,以便我可以在其他函数中解析它并使用它。
但我被卡住了,不知道我应该如何在 void * 中存储布尔值。
但是当我在另一个函数中解析它时,我总是得到真值。
#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,但是它指向哪里? -
到一些结构的变量数据。
-
另外,你在
memcpy调用之后增加了var_data,这意味着它不再指向你复制到它所指向的数据。所以“在另一个函数中”,指针并没有指向你认为的数据。 -
请edit 您的问题包含正确的minimal reproducible example。也请尝试解释为什么你需要这样做。您要解决的原始问题是什么。
-
A minimal reproducible example 不应该是您的“完整代码”,它应该足以让我们复制粘贴并复制您提出的问题,仅此而已。
标签: c boolean memcpy void-pointers