C/Napisy: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Linia 81:
Należy cały czas pamiętać, że napis jest tak naprawdę tablicą. Jeśli zarezerwowaliśmy dla napisu 80 znaków, to przypisanie do niego dłuższego napisu spowoduje '''pisanie po pamięci'''.
 
{{uwaga|1=Deklaracja <tt>const char *tekst = "cokolwiek";</tt> oraz <tt>char tekst[] = "cokolwiek";</tt> pomimo, że wyglądają bardzo podobnie bardzo się od siebie różnią. W przypadku pierwszej deklaracji próba zmodyfikowania napisu (np. <tt>tekst[0] = 'C';</tt>) może wyświetlać błąd kompilacji. Dzieje się tak dlatego, że <tt>const char *tekst = "cokolwiek";</tt> deklaruje wskaźnik na '''stały''' obszar pamięci{{r|const}}.}}
 
Pisanie po pamięci może czasami skończyć się błędem dostępu do pamięci ("segmentation fault" w systemach UNIX) i zamknięciem programu, jednak może zdarzyć się jeszcze gorsza ewentualność - możemy zmienić w ten sposób przypadkowo wartość innych zmiennych. Program zacznie wtedy zachowywać się nieprzewidywalnie - zmienne a nawet stałe, co do których zakładaliśmy, że ich wartość będzie ściśle ustalona, mogą przyjąć taką wartość, jaka absolutnie nie powinna mieć miejsca.