【发布时间】:2020-05-29 18:28:26
【问题描述】:
我正在尝试编译第三方库,但由于某种原因出现错误。该库的编译方式可能不同。我已经阅读了错误,但我似乎无法弄清楚问题所在! :(
struct sfo_entry {
char* key;
size_t size;
size_t area;
void* value;
enum sfo_value_format format;
struct sfo_entry* next;
struct sfo_entry* prev;
};
struct sfo {
struct sfo_entry* entries;
};
bool sfo_load_from_memory(struct sfo* sfo, const void* data, size_t data_size) {
struct sfo_header* hdr;
struct sfo_table_entry* entry_table;
struct sfo_table_entry* entry;
entry_table = (struct sfo_table_entry*)(data + sizeof(*hdr));
// ...
return true;
}
错误如下:
sfo.cpp:150:47: error: arithmetic on a pointer to void
entry_table = (struct sfo_table_entry*)(data + sizeof(*hdr));
~~~~ ^
【问题讨论】:
-
这能回答你的问题吗? Pointer arithmetic for void pointer in C
-
你不能在
void*上做指针运算,你需要把它转换成其他可识别的类型,你的情况应该是char*:(struct sfo_table_entry*)((char*)data + sizeof(*hdr)); -
一些实现会将大小设为
1,但它是未定义的。目标类型未知。 -
感谢大家的意见。将其转换为
char *确实有效。给定的信息对我的情况非常有用。
标签: c compiler-errors void-pointers