ccpp:strings

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

Zdroje a příručky

  • ccpp/strings.txt
  • Poslední úprava: 2023/04/16 22:56
  • autor: bures