Dlaczego dwie tablice znaków się łączą?

0

Witam, mam taką sytuację:

 
struct foo
{
	char x[32];
	char y[32];
};
string a = "12345678901234567890123456789012"; //32znaki
string b = "test";

foo test;
strcpy(test.x, a.c_str());
strcpy(test.y, b.c_str());

cout << test.x;

cout << text.x wyświetla 12345678901234567890123456789012test

Dlaczego te dwie tablice się łączą?

0

poniewaz chary leza kolo siebie. jak masz 32 znakow to nie jest zapisywany do tablicy charow znak konca '\0' i cout czyta po prostu dalej (az napotka ten znak, ktory jest w drugej tablicy) jak zmniejszysz do 31 znakow to wtedy znak konca wpisze sie do tablicy charow

1

Bo żeby poprawnie wypisać char* musisz mieć na końcu znak \0 bo inaczej nie wiadomo gdzie zakończyć wypisywanie. Ty w tablicy tego znaku nie masz bo nie było na niego miejsca. Początkowo go skopiowałeś (wychodząc poza zakres tablicy x i wpisując to na początku y) a potem kopiowanie do y skasowało ten znak. W efekcie pierwszy znak \0 jest dopiero za napisem "test".

1 użytkowników online, w tym zalogowanych: 0, gości: 1