Napis, sposób definiowania w C

0
  char Napis[] = "abcdef" 
   char *Napis = "abcdef"

Jaka jest różnica pomiędzy tymi dwoma sposobami ?
W języku c przy użyciu 2-giej opcji wywala core dumped. Mój program między innymi za pośrednictwem innych funkcji przesuwa wskaźnik na napis ...

0
const char *Napis="abcdef";

tak jest ok.

1

Pomiędzy tymi zapisami jest spora różnica. To coś pomiędzy apostrofami nazywa się literałem łańcuchowym i może być użyte na dwa sposoby. W tym zapisie: char Napis[] = "abcdef"; literał używany jest do inicjalizacji tablicy znakowej. W tym zapisie char *Napis = "abcdef"; literał jest traktowany jako nienazwana tablica znaków, która może być umieszczona w obszarze tylko do odczytu. Oczywiście jak każda tablica jest on w tym zapisie konwertowany do wskaźnika na pierwszy element, który zapisywany jest w zmiennej Napis. Z powyższego powodu (i tak jak napisał @Azarien) należy pisać const char *, modyfikacja tego na co wskazuje ta zmienna jest niebezpieczna.

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