Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Ahoj zarazil ma tento priklad: Nataham si niekolko riadkov zo suboru , a postupne ich parsujem , v kazdom riadku Person je Meno:Priezvysko:Vaha a nasledne tieto osoby napchat do struktury person avsak musim ju dynamicky naalokovat , vie mi niekto poradit ci to je dobre?
struct Person{
char*name;
char*surname;
int weight;
}person[num];
person[x]=malloc(sizeof(struct Person));
alebo najprv treba alokovat name aj surname ? Dakujem
A ci je ta moja malloc dobre lebo pochybujem :)
A este jedna otazka, musim si vzdy alokovat aj name a surname alebo to uz obsahuje ta alokacia struktury?
Offline
Zdravím,
dají se použít základní dva zápisy - s typedef a bez typedef (možná i více, ale uvedu základní dva).
1]
struct Person {
char name[20];
char surname[20];
int weight;
} osoba;2]
typedef struct {
char name[20];
char surname[20];
int weight;
} Person;Nadeklarujeme:
Person * osoba;
Naalokujeme paměť (je to podobné jako operátor new - jak to známe u vytvoření instance):
osoba = (Person*)malloc(sizeof(Person));
Klasicky přiřazujeme:
osoba.weight = 80;
Pozor na pole, není přiřaditelné, proto se musí použít funkce strcpy k tomuto účelu:
strcpy(osoba.name, "Karel");
Pokud je vyžadováno pole, naalokujeme paměť podobným způsobem (ta dvojka je tam důležitá protože nám říká, že jsme vytvořili pole pro dvě struktury):
osoba2 = (Person*)malloc(2 * sizeof(struct Person*));
Klasicky přiřazujeme:
osoba2[0].weight = 50; strcpy(osoba2[0].name, "Bětka"); osoba2[1].weight = 59; strcpy(osoba2[1].name, "Libuše");
Nejsem si u všeho úplně jist. Určitě budu rád, pokud někdo něco k tomuto doplní.
Offline
Zdravím,
pokud máme ve struktuře char * name, tak to musíme samozřejmě alokovat.
V našem případě to bude:
person osoba3; osoba3.name = (char*)malloc(20);
Offline