Ciągi w C są reprezentowane jako tablice znaków.
char *p = "String";
Jesteś deklarując wskaźnik, który wskazuje na ciąg przechowywane pewne gdzie w programie (modyfikując ten ciąg jest niezdefiniowane zachowanie) w zależności od języka programowania C 2 ed.
char p2[] = "String";
Jesteś deklarowania tablicę char zainicjowany z ciągiem „string” odchodzi do kompilatora zadanie policzyć rozmiar tablicy.
char p3[5] = "String";
Deklarujesz tablicę o rozmiarze 5 i zainicjalizujesz ją ciągiem "Łańcuch". Jest to błąd, ponieważ "String" nie pasuje do 5 elementów.
char p3[7] = "String";
to poprawna deklaracja ("\ 0" jest znakiem kończącym w łańcuchach c).
http://c-faq.com/~scs/cclass/notes/sx8.html
Dobrze, że ostatnia jest przepełnienie bufora, więc to miłe. – Dan
Trzecim przykładem powinno być 'p3 [6]': musisz obliczyć ostateczny 0 – fge
@ fge: w rzeczywistości 7. – Mat