====== Textové řetězce ====== Textové řetězce jsou v paměti počítače reprezentovány jako sekvence znaků, na jejichž konci je bajt s hondotou nula - tzv "null terminator", reprezentovaný také jako escape sekvence '' '\0' ''. Pro deklaraci řetězců používáme datový typ pole např ''char str[]''. Pro práci s polem slouží knihovna '''' ===== Deklarace/definice řetězce ===== Zde je několik příkladů jak lze nadeklarovat a nadefinovat řetězec. char str1[256]; // Standardní deklarace retězce s maximální délkou 255 znaků + '\0' char str2[256] = "Hello"; // Definice řetezce s obsahem "Hello". const char str3[] = "Hello world!"; // Definice konstantního řetězce ===== Manipulace s řetezci ===== ==== Výstup ==== Pro výspis řetezce nejčastěji používáme funkce ''puts()'', či ''printf()'' s formátovacím specifikátorem ''%s''. char str[256] = "Hello"; puts(str); printf("%s\n", str); ==== Vstup ==== Pro vstup používáme nejčastěji funkci ''fgets()'', protože funkce ''scanf()'' se specifikátorem ''%s'' může být nebezpečná, pokud by zadaný řetězec "přetekl" velikostí cílové místo. Funkce ''fgets()'' čte text v maximální délce zadané jako parametr (včetně místa pro ukončující bajt), nebo dokud nenarazí na znak konce řádku ''\n'' char str1[256] = {}; char str2[256] = {}; scanf("%s", str1); // Žádný & // alternativně scanf("%255s", str1); // Nejlépe fgets(str2, 256, stdin); ===== Délka řetězce ===== Délku řetězce je třeba změřit tak, že spočítáme všechny znaky od začátku až po nulový bajt. Lze to provést například knihovní funkcí ''strlen()''. Pro pozdějsí použití lze tuto hodnotu uložit, ale je třeba ji aktualizovat jakmile se řetězec změní. ===== Úprava ===== Pokud chceme modifikovat obsah řetězce, můžeme použít standardní postupy jako s libovolným jiným polem. Pro nejčastější operace jako kopírování řetezců existují funkce v knihovně ''''. Je důležité si pečlivě přečíst referenci dané funkce, funkce ''strcpy()'' má jako první argument cílový řetězec a duhý je zdrojový. char str1[]="Sample string"; char str2[40]; strcpy (str2,str1); ====== Zdroje a příručky ====== * [[https://cplusplus.com/reference/cstring/]] * [[https://cplusplus.com/reference/cstdio/fgets/]]