Tekstowy typ danych
Tekstowy typ danych (ang. string) – typ danych służący do przechowywania ciągu znaków (zmiennych łańcuchowych).
Angielski termin string tłumaczy się zwykle jako „ciąg znaków”, ale używa się także określenia „łańcuch znaków” lub krótko „łańcuch”.
Realizacja
edytujW niektórych językach programowania jak np. Pascal czy PHP łańcuchy są typem wbudowanym; w pozostałych jak C, C++, Java realizuje się je za pomocą innych struktur języka.
W tradycyjnych realizacjach Pascala (np. Turbo Pascal) zmienna typu String może przechowywać do 255 znaków, a w definicji String[długość] może przechowywać do długość znaków, a ma rozmiar długość+1 i jest zaimplementowana jako tablica, której element o indeksie 0 przechowuje liczbę znaków w tym ciągu (typu bajt więc maksymalna długość łańcucha wynosi 255). W późniejszych implementacjach tego języka (np. Object Pascal w Delphi) dodano inną formę reprezentacji łańcucha, w którym maksymalna długość wynosi 2^32 bajtów i jest dynamicznie przydzielana w zależności od długości napisu, typ ten jest rozszerzeniem sposobu implementacji używanego przez C, dodano również typ w stylu C (PChar).
W języku C łańcuchy reprezentuje się jako tablice znaków, a operacje na nich wykonuje z użyciem wskaźników. Rozmiar takiej tablicy może być dowolny, nie jest oddzielnie przechowywany, a programista musi zadbać o to, by napis nie przekroczył rozmiaru bufora (przepełnienie bufora), a także, by pamięć po buforze była zwolniona. Napis nie musi wypełniać całej tablicy, ponieważ znacznikiem końca napisu jest znak o kodzie zero ('\0'
). Taką reprezentację nazywa się z ang. null terminated string.
W C++ oprócz tradycyjnych ciągów znaków w stylu C istnieje w bibliotece standardowej klasa std::string. Ukrywa ona niewygodne aspekty używania napisów w stylu C: zarządzanie pamięcią, określanie długości, łączenie napisów, wstawianie, usuwanie i inne manipulacje na napisie. Dodatkowo pozbyto się problemu znaku kończącego – znak o kodzie 0 może być elementem napisu std::string (długość przechowywana jest oddzielnie). Ponieważ biblioteka standardowa (bazująca w tym zakresie na STL) została dość późno dołączona do oficjalnego standardu, wiele kompilatorów dostarcza własne implementacje typów napisowych – np. String, AnsiString, CString. Również niektóre starsze biblioteki (jak np. Qt) dostarczają własnych typów obsługi napisów.
Przerwania systemu MS-DOS wykorzystują wariant ASCIIZ polegający na zamianie terminatora 00h na $ (symbol dolara). Przy wywoływaniu funkcji 13h przerwania 10h kart graficznych, od EGA wzwyż w architekturze IBM PC i pochodnych, służącej do wyświetlania łańcucha na ekranie, podaje się wskaźnik na początek łańcucha i jego długość.
Zarówno w C, C++, Pascalu, jak i w WinAPI spotkać się można z wariantami łańcuchów ANSI oraz Wide, które są wersją stosującą Unicode, a dokładniej kodowanie UTF-16 (na każdy znak przeznaczone są 2 bajty).