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 <string.h>
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
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);
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é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í.
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ě <string.h>
. 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);