簡體   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