kasandra77 Ответов: 1

Как использовать указатель на поле структуры ?


как использовать указатель на поле структуры

Что я уже пробовал:

typedef struct SVisitor
{
  char **room_name;
} Visitor;

typedef struct SChallengeRoom
{
   char *name;
} ChallengeRoom;
// i want to chane room_name in the first struct to name in the second sruct 
//i did something like this 
visitor_enter_room(ChallengeRoom *room, Visitor *visitor){
visitor->room_name=room->name
}

0x01AA

А что не работает, кроме char ** room_name не соответствующий char *Name?
И еще одно, не забывайте об этом на случай, если кто-то удалит символ* ...
Кстати: это помнит меня к моему началу программирования с modula2 и непрозрачными типами по крайней мере до 30 лет ;)

kasandra77

ничего себе более 30 лет !!
да, я знаю, что это неправильно : посетитель - & gt;room_name=room- & gt;name
но я вроде как застрял сейчас в том, как дать room_name имя в структуре комнаты, поэтому, когда я делаю что-то вроде этого :
strcmp ("название комнаты", *(посетитель->room_name) ) == 0) я получаю правильный ответ !

0x01AA

посетитель - & gt;room_name= & (room-> Name); опять же, это очень небезопасно, потому что "пожизненно" это непонятно.

kasandra77

не могли бы вы объяснить мне, что вы подразумеваете под жизнью :\

1 Ответов

Рейтинг:
12

KarstenK

Первичное состояние инициализации указателя должно быть нулевым. Если вам нужна некоторая память, то вы должны выделить необходимую память.

Лучшая практика заключается в выделении собственная память для каждой структуры.

visitor_enter_room(ChallengeRoom *room, Visitor *visitor) {
visitor->room_name = malloc( strlen(room->name) + 1 );//allocate memory
strcpy( visitor->room_name,room->name); // copy string
}

Если вы закончили с этой памятью, вы должны использовать free для очистки!!!
Совет: вы также можете работать со strdup и бесплатно.
Google для получения более подробной информации и примера кода.