Textové řetězce (strings)
Předchozí [Datová pole (arrays)]
Doteď jsme se zabývali jednoduchými datovými typy, případně jejich sloučením do datového pole. Poznali jsme celočíselné proměnné, proměnné držící desetinné číslo, char (pro písmena) a void.
Jazyk C (na rozdíl od mnoha jiných programovacích jazyků) nenabízí automaticky typ string. Ale poněvadž už umíme pracovat s datovými poli, aneb poli, která slučují data stejného typu, pak si s chybějícím textovým řetězcem hravě poradíme. Vždyť text není nic jiného než uskupení písmenek - v Céčku tedy datové pole držící náš text ve formě jednotlivých písmenek.
Konec textového řetězce značí v Céčku tzv. null-byte, ‘\0’.
Následuje ukázka toho, jak by mohl takový řetězec v kódu vypadat:
char text1[5] = { 'A', 'h', 'o', 'j', '\0' };
char text2[5] = "Ahoj"; // compiler nam na konec automaticky da '\0'
char text3[] = "Ahoj"; // i zde lze vynechat velikost pole - je znama pres pocet prvku
Nyní už jsme schopní si od uživatele vyžádat i jeho jméno. Zkuste nyní použít funkci fgets(); potřebné informace k ní najdete přes man fgets (v příkazovém řádku).
#include <stdio.h>
#define MAX 15
int main(void)
{
char jmeno[MAX];
printf("Jmeno: ");
fgets(jmeno, MAX, stdin);
printf("Zadane jmeno: %s", jmeno);
return 0;
}
Maximální délku jména jsem limitovala na 15. Toto číslo jsem definovala jako konstantu (celkem nahoře pomocí #define MAX 15).
Pokud byste se chtěli podívat, co se nachází na jednotlivých místech proměnné “jmeno”, pak si je můžete nechat vytisknout opět pomocí smyčky. Ideálně jako čísla, abyste viděli i netisknutelné znaky. Překlad mezi čísly a znaky pak najdete v ASCII tabulce.
#include <stdio.h>
#define MAX 15
int main(void)
{
char jmeno[MAX];
printf("Jmeno: ");
fgets(jmeno, MAX, stdin);
printf("Zadane jmeno: %s", jmeno);
printf("Znaky v poli 'jmeno': \n");
for (int znak = 0; znak < MAX; znak++)
{
printf("%d ", jmeno[znak]);
}
printf("\n");
return 0;
}
Všimněte si, že ať už zadáte jakékoli jméno, končí novým řádkem (\n, nebo 10) a null bytem (0). Cokoli potom jsou nedefinované hodnoty, hodnoty, které v paměti už byly.
Kam dál?
TBD. Příště ti ukážu, jak můžeš programu při spuštění přidat argumenty přes příkazový řádek.