Diskuze: Statické vs. dynamické řetězce ve strukturách

C++ C a C++ Statické vs. dynamické řetězce ve strukturách

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Ahoj, chci se zeptat jak se nejčastěji deklarují textové řetězce ve strukturách. Řekněme, že mám nyní takovouto strukturu (uzel spojového seznamu):

typedef struct osoba{
    int vek;
    char *jmeno;
    ADRESA adresa;
    struct osoba *p_dalsi;
} OSOBA;

Dříve jsem měl jméno jako char[50], což mi přišlo jako plýtvání pamětí. Bohužel se v kódu nyní objevily konstrukce jako:

scanf(" %100[^\n]s", buffer);
osoba->jmeno = (char *) malloc(sizeof(char) * (strlen(buffer) + 1));
strcpy(osoba->jmeno, buffer);

Což mi přijde docela šílené. Existuje nějaká lepší varianta, vypadají zdrojáky opravdu takhle nebo se ty stringy dělají spíše staticky?

Odpovědět 22.10.2014 17:39
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Silvinios
Redaktor
Avatar
Odpovídá na David Čápka
Silvinios:

Obě varianty se v C běžně používají. Záleží, co od toho potřebuješ. Funkce malloc a strcpy se dají nahradit funkcí strdup, která ale není součástí ANSI C.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 22.10.2014 19:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.