Tablice znaków są podstawową formą reprezentacji ciągów znaków w językach C i C++. Są to tablice zawierające sekwencje znaków, które kończą się specjalnym znakiem, zwanym znakiem null (’\0′), który oznacza koniec ciągu.
Przykład:
#include <iostream>
int main() {
char przywitanie[] = "Witaj, świecie!";
std::cout << przywitanie << std::endl;
return 0;
}
W powyższym przykładzie,
przywitanie
jest tablicą znaków, która przechowuje ciąg znaków „Witaj, świecie!” i kończy się znakiem null. Można manipulować poszczególnymi znakami w tablicy, ale należy pamiętać o ograniczeniach rozmiaru tablicy i konieczności ręcznego zarządzania pamięcią.
Uwaga bezpieczeństwa
Przy korzystaniu z funkcji
strcpy
i
strcat
należy zachować szczególną ostrożność, aby uniknąć przepełnienia bufora, ponieważ te funkcje nie sprawdzają rozmiaru bufora docelowego. To oznacza, że jesteśmy odpowiedzialni za zapewnienie, że bufor docelowy jest wystarczająco duży, aby pomieścić dane, które mają być do niego skopiowane lub do niego dodane.
strcpy
– kopiowanie ciągu znaków
Funkcja
strcpy(char* dest, const char* src)
kopiuje ciąg znaków źródłowy
src
(włącznie ze znakiem końca ciągu) do bufora docelowego
dest
.
Przykład:
#include <iostream>
#include <cstring>
int main() {
char zrodlo[] = "Witaj";
char docelowy[10]; // Zarezerwowany bufor o wystarczającym rozmiarze
strcpy(docelowy, zrodlo);
std::cout << "Zrodlo: " << zrodlo << std::endl;
std::cout << "Docelowy: " << docelowy << std::endl;
return 0;
}
strcat
– łączenie ciągów znaków
Funkcja
strcat(char* dest, const char* src)
dołącza ciąg znaków źródłowy
src
do ciągu znaków docelowego
dest
, zastępując znak końca ciągu w
dest
pierwszym znakiem z
src
i kończąc nowy ciąg znakiem końca ciągu.
Przykład:
#include <iostream>
#include <cstring>
int main() {
char przywitanie[20] = "Witaj, ";
char imie[] = "Świecie";
strcat(przywitanie, imie); // Łączy "Świecie" z "Witaj, "
std::cout << "Połączony ciąg: " << przywitanie << std::endl;
return 0;
}
Podsumowanie
- Funkcje
strcpy
i strcat
umożliwiają proste operacje na ciągach znaków w C++, ale wymagają ostrożności, aby uniknąć błędów związanych z przepełnieniem bufora.
- Ważne jest, aby przed ich użyciem zawsze upewnić się, że bufor docelowy jest wystarczająco duży, aby pomieścić wynikowe dane.