繁体   English   中英

如何强制使用void *结构成员?

[英]How to cast void* struct members?

我正在尝试从结构成员投射void* 该结构如下所示:

typedef struct{
    int n;
    void* string;
}query;

我想将成员stringchar*并存储另一个字符串-假设str2像这样:

char* str2 = "hello";
(*(char*)q.string) = str2;

但是它不断告诉我这个警告:

example.c:在函数'main'中:example.c:23:33:警告:赋值使指针从整数开始,而没有强制转换[-Wint-conversion](*(char *)q.string)= str2;

为什么这不起作用?

您根本不需要演员表。

就是说,在您的示例中, query是一种类型,而不是变量。

像这样使用

query q;
q.string = str2;

一个有效的例子

警告是正确的。 较新版本的gcc具有更有用的信息:

警告:从'char *'分配给'char'会使指针变为整数,而不进行强制转换[-Wint-conversion]

 13 | (*(char*)q.string) = str2; | ^ 

取消引用char *这给你一个char 给该char类型分配str2 ,它的类型为char *

正如Sourav Ghosh向您展示的那样,您可以执行以下操作:

q.string = str2;

如果您真的想使演员表明确:

q.string = (void*)str2;

如您所见,您在错误的一侧进行了投射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM