Text v proměnné
Zatím jste do proměnných ukládali čísla a jednotlivé znaky. Programy ale neustále pracují s textem: se jmény, se zprávami, s hesly. Textu se v programování říká řetězec, protože se v něm znaky řadí jeden za druhým jako články řetězu. Anglicky se mu říká string, a proto názvy funkcí pro práci s řetězci začínají na str, jak uvidíte v této lekci.
Jazyk C nemá pro text žádný zvláštní datový typ. Řetězec je obyčejné pole znaků, tedy pole typu char. Vytvoříte ho takto:
char jmeno[] = "Anna";Text se píše do dvojitých uvozovek. Hranaté závorky zůstanou prázdné, takže velikost pole spočítá překladač sám, stejně jako u pole čísel. Kolik prvků ale pole má? Text má 4 písmena, pole však 5 prvků:
index: 0 1 2 3 4
znak: 'A' 'n' 'n' 'a' '\0'Posledním prvkem je nulový znak '\0': zpětné lomítko a nula v jednoduchých uvozovkách, protože jde o jediný znak. Ve výpisu ho neuvidíte, jeho hodnota je číslo 0. Označuje místo, kde text končí, a překladač ho sám přidá na konec každého textu ve dvojitých uvozovkách. K čemu je potřeba? Nic jiného funkci printf ani ostatním funkcím neřekne, kde text končí (a později v této lekci uvidíte texty, které jsou kratší než jejich pole). Proto řetězec procházejí znak po znaku, dokud nenarazí na '\0'.
Řetězec vypíšete pomocí formátovací značky %s (s jako string). Za formátovací řetězec napíšete název pole, bez hranatých závorek:
char jmeno[] = "Anna";
printf("Ahoj, %s!\n", jmeno);Program vypíše:
Ahoj, Anna!printf vypisuje znaky pole jmeno jeden po druhém a u '\0' se zastaví. Díky této koncové značce jde řetězec vypsat najednou, kdežto pole čísel ne.
Pozor na uvozovky. Do jednoduchých patří jeden znak typu char: 'A'. Do dvojitých patří řetězec: "A" je pole dvou znaků, 'A' a '\0'. Když je spletete, program nepůjde přeložit:
char pismeno = "A";main.c:4:10: error: incompatible pointer to integer conversion initializing 'char' with an expression of type 'char[2]' [-Wint-conversion]Hláška mluví o ukazatelích (pointer), které poznáte později v kurzu. Důležité je v ní char[2]: tam, kam patří jeden znak typu char, jste dali pole dvou znaků. Když tuto hlášku uvidíte, zkontrolujte uvozovky.
Častou chybou je také printf(jmeno);. Vypadá jednodušeji, ale program nepůjde přeložit:
char jmeno[] = "Anna";
printf(jmeno);main.c:5:12: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]printf bere první hodnotu v závorkách vždy jako formátovací řetězec, tedy jako návod, co a jak vypsat. Kdyby jméno obsahovalo znak %, printf by ho považoval za formátovací značku. Řetězec proto vždy vypisujte přes %s: printf("%s\n", jmeno);.
Jak psát:
Pokyny
Pod uvítací řádek vytvořte řetězec hrac s textem "Petr" a vypište ho pomocí %s tak, aby se ve výpisu objevil řádek Hráč: Petr.
Kolik prvků má pole hrac? Pod výpis uložte sizeof(hrac) do proměnné velikost typu int a vypište ji: Velikost: 5. sizeof udává velikost v bajtech a jeden char zabírá přesně jeden bajt, takže u pole znaků je to rovnou počet prvků. Proč vyšlo 5, když má jméno jen 4 písmena?
Začněte programovat zdarma
1/10