problem v C
Jiří Foldyna
jiri.f
Středa Březen 17 12:05:03 CET 2004
> Diky, tento posledni prispevek, ma pro me asi nejvetsi vahu. Jsem v C
> zacatecnik, a navic samouk (je az divny, kolik mi toho
> funguje). Mam dve
> knizky, ktere tak navzajem konzultuju.
> Lepsi tedy bude: static string menu1[3]={"blabla
> ","blablabla","huiiii
> "}; ?
> To asi taky neni ono. Poradte prosim jak na to. Ta NULL na
> konci by asi
> pomohla, ale neni neco programatorsky cistsiho (inicalizovat tak, aby
> kompilator vedel, ze jde o retezec a vrazil tam ty nuly sam)?
Ahoj,
pokusim se o malinky uvod do stringovych literalu a inicializovanych
konstant.
1. Za retezec se v Ccku povazuje pole znaku indexovane od nuly a ukoncene
terminatorem stringu (0x00). Funkce, ktere s retezci pracuji, s tim
pocitaji, a napr. funkce printf() bude vypisovat znaky, dokud na terminator
nenarazi.
2. Pokud potrebujes kompilatoru rici, ze chces, aby pole znaku inicializoval
na nejakou hodnotu, napises
char name[] = {"Jmeno"};
Kompilator vytvori pole o delce 6 znaku, kde name[0] = 'J', name[1] =
'm',..., name[5] = 0x00.
Pokud ovsem pouzijes konstrukci
char name[5] = {"Jmeno"};
tak kompilator bud zarve (to zalezi na prekladaci, pripadne na nastaveni
parametru prekladu) nebo inicializuje pole pouze tolika znaky, kolik se mu
tam vejde, tedy v tomto pripade name[0] = 'J', name[1] = 'm',..., name[4] =
'o' a na terminator stringu uz mu nezbude misto.
Spravna deklarace by tedy v tvem pripade mela vypadat asi takto:
static char code menu1[3][17]= {"1. INFO ",
"2. Teplota ",
"3. Cas/Datum "};
tedy 16 znaku pro jednotlive polozky a 1 znak pro terminator stringu.
Pokud bys nepotreboval zarovnat text na pevnou delku (nepotrebujes mezery za
textem), staci tato deklarace:
static char code menu1[3][17]= {"1. INFO",
"2. Teplota",
"3. Cas/Datum"};
V kazdem pripade se ovsem musis postarat, aby inicializacni stringovy
literal (fuj, to je hnusny nazev, ale lip to rict neumim) nebyl i s koncovym
terminatorem stringu delsi nez max delka polozky pole.
Doufam, ze jsem se vyjadril jasne (jsem ucitel na baterky :-)))))).
Ing. Jiri Foldyna
mailto:jiri.f@avizo.cz
Další informace o konferenci Hw-list