Tablice znaków w stylu C++

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.