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

时间:2019-04-04 05:40:03

标签: c string casting

我正在尝试从结构成员强制转换void*。结构看起来像这样:

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

我想将成员string强制转换为char*并存储另一个字符串,比如说str2,如下所示:

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

但是它一直告诉我这个警告:

  

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

为什么这不起作用?

2 个答案:

答案 0 :(得分:2)

根本不需要演员表。

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

使用方式

query q;
q.string = str2;

A working example

答案 1 :(得分:1)

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

  

警告:从'char *'分配给'char'使   指针的整数,无强制转换[-Wint-conversion]

Work

您取消引用13 | (*(char*)q.string) = str2; | ^ 的{​​{1}}。为该char *类型分配char类型的char

Sourav Ghosh向您显示了,您可以这样做:

str2

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

char *

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