Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Приведения char* к struct* + взятие члена


Автор: Fedor 25.7.2006, 20:49
в общем, сабж.
Язык C
Есть переменная типа char*
Мы ее приводим к указателю на некую структуру. 
И  в этом же выражении нужно сразу взять член структуры.
Возможно ли это?

И если да, то как? 

Автор: Akeem 25.7.2006, 21:07
конечно я не вижу тут проблемы.

Код

struct Str
{
int x;
};

char * name;

Str name2;

name=(char *)name2.x;

 

Автор: Fedor 25.7.2006, 21:12
Akeem, ;)
мне наоборот надо - из char* к указателю на структуру 

Автор: Damarus 25.7.2006, 21:13
Так, что ли:

Код

struct XXX
{
    int v1;
    int v2;
};

int wmain(int argc, wchar_t *argv[], wchar_t *envp[])
{
    struct XXX s;
    struct XXX* ps;
    char* p;
    int vx;

    s.v1 = 1;
    s.v2 = 2;
    p = (char*)&s;

    vx = (ps = (struct XXX*)p)->v1; // <<<<<<<<<<<<<
    vx = ps->v2;
}

 

Автор: Fedor 25.7.2006, 21:21
Damarus, похоже на то. Благодарю.

З.Ы. Хотя буду вообще счастлив и прыгать до потолка, если есть способ, в котором не будет переприсваивания ps = ...

Добавлено @ 21:25 
Хм. Странно. У меня на одном компиляторе компилится и без этого присваивания, а на другом вроде нет... smile Ладно. Буду смотреть. Может, это я тупой... 

Автор: Damarus 27.7.2006, 21:03
Цитата(Fedor @  25.7.2006,  22:21 Найти цитируемый пост)
З.Ы. Хотя буду вообще счастлив и прыгать до потолка, если есть способ, в котором не будет переприсваивания ps = ...

Как я понял ps не нужен вообще? Тогда так:
Код

//................
    vx = ((struct XXX*)p)->v1; // <<<<<<<<<<<<<
    //vx = ps->v2
//................

У меня на VS2005 работает.
  

Автор: powerfox 27.7.2006, 21:12
Цитата(Fedor @  25.7.2006,  21:49 Найти цитируемый пост)
в общем, сабж.Язык CЕсть переменная типа char*Мы ее приводим к указателю на некую структуру. И  в этом же выражении нужно сразу взять член структуры.Возможно ли это?

Не могу понять, зачем? 

Автор: np9mi7 27.7.2006, 21:33
Цитата
Не могу понять, зачем? 
, буфер и пакет достается из него (уверен почти на 100 %). Кто программирует на С такой медот любят; 

Автор: ynter 29.7.2006, 21:08
Цитата(Fedor @  25.7.2006,  21:21 Найти цитируемый пост)
Хм. Странно. У меня на одном компиляторе компилится и без этого присваивания, а на другом вроде нет... smile Ладно. Буду смотреть. Может, это я тупой...  


Может ты имел в виду что-то вроде этого:

Код

struct Str
{
int x;
};

char * name;
Str str;
Str *pstr = &str;

pstr=(Str *)name; // <<<<<<<<<<<<

 

Автор: Fedor 31.7.2006, 20:39
Ребят, все работает, спасибо. Это я тупой smile. Код написал правильный, только сделал небольшую "орфографическую" ошибку, а потом не сильно вчитался в сообщение компилятора. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)