Как разыграть членов void * struct? - PullRequest
2 голосов
/ 04 апреля 2019

Я пытаюсь привести 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-преобразование] (* (char *) q.string) = str2;

Почему это не работает?

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Вам вообще не нужен приведение.

Тем не менее, в вашем примере query - это тип, а не переменная.

Используйте его как

query q;
q.string = str2;

Рабочий пример

1 голос
/ 04 апреля 2019

Предупреждение верно.Более новые версии gcc содержат более полезное сообщение:

предупреждение: присваивание 'char' из 'char *' делает целое число из указателя без приведения [-Wint-преобразование]

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

Вы разыменовываете char *, что дает вам char.Этому типу char вы присваиваете str2 типа char *.

Как показал Сурав Гхош , вы можете просто сделать это:

q.string = str2;

Если вы действительно хотите сделать приведение явным:

q.string = (void*)str2;

Как видите, вы выполняли приведение не с той стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...