problem v C

Jakub Ladman ladmanj
Středa Březen 17 12:05:02 CET 2004


Tak to jsem nastesti vsechno vedel, ale byl jsem skalopevne presvedcen, ze
pole[16] se da indexovat 0-16 tzn. 17 prvku.
Jakub
----- Original Message -----
From: "Jiří Foldyna" <jiri.f@avizo.cz>
To: "Multiple recipients of list" <hw-news@list.gin.cz>
Sent: Thursday, February 22, 2001 12:17 PM
Subject: RE: problem v C


> > 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