Witam!
Ostatnimi czasy pisałem klasę String. Robiłem to "razem" z książką "Język c++, szkoła programowania. Stephen Prata". Było to tylko takie ćwiczenie nabytych technik. Jedno zadanie polegało na stworzeniu funkcji, która zamieni znaki z małych na duże. Otóż w tej funkcji zrobiłem pętlę for, która każdy znak, znak po znaku zamieniała. No i tutaj zaczęły się problemy. Ciąg char był inicjowany tak:
str = new char [len + 1];
std::strcpy(str, zrodlo);
// W zmiennej len miałem długość ciągu. Zmienna str to zmienna wskaźnikowa char *
// zrodlo to też wskaźnik na char *. W zrodlo przechowywany jest ciag pobrany przez funkcje.
Potem taki ciąg str przeglądałem pętlą for
for (int i =0; i<len; i++) {
// tutaj jakies operacje
cout << str[i];
}
Problemem było to, że po wyświetlaniu wyrazu dalej były krzaki. Ale pomyślałem sobie, że przecież jak dodaję 1 przy inicjacji tablicy, to i w pętli dam +1 (czyli len + 1). Problem zniknął.
Wiem, że "tekst" w tablicy jest zapisane jako "t","e","k","s","t","\0". Dlaczego jeśli zakończyłem pętlę na "t" dalej wyświetlały się losowe znaki?