Nie będzie wiedział, musisz przydzielić pamięć dla niego osobno.
struct Person *who = malloc(sizeof(struct Person));
Przydziela wystarczającą ilość pamięci do przechowywania obiektu typu Person
.
Wewnątrz obiektu Person
element name
zajmuje po prostu powierzchnię równą wielkości wskaźnika do char
.
Powyższe malloc
po prostu alokuje tyle miejsca, aby móc zrobić cokolwiek znaczącego przy pomocy wskaźnika elementu, do którego będziesz musiał przydzielić pamięć osobno.
#define MAX_NAME 124
who->name = malloc(sizeof(char) * MAX_NAME);
Teraz członek name
punkty do dynamicznej pamięci o rozmiarze 124
bajt na stercie i można go stosować dalej.
Ponadto, po zakończeniu użytkowania, należy koniecznie pamiętać o tym, aby uzyskać free
lub w efekcie wyciek pamięci.
free(who->name);
free(who);
Nie próbuj pisać wielojęzycznych plików źródłowych. Wierzę, że idiomatyczny sposób zarządzania pamięcią w C++ jest z [RAII] (http://en.wikipedia.org/wiki/RAII). – pmg
Nie, "nazwa" jest po prostu wskaźnikiem, który ma odrębny rozmiar (zwykle 4 lub 8 bajtów). Kiedy to sobie uświadomisz, dostałeś to. –