Mitglied seit 07/2011
13 Beiträge
|
![]()
Betreff: kurze frage zu arrays
hi!
ich hab nur ne kurze Frage: was ist der Unterschied zwischen char * a = "hallo"; undchar a[] = "hallo"; ? ich dachte es gäbe keinen Unterschied, aber nur bei der zweiten Variante kann ich danach zb a[0] = 'b'; ausführen ohne einen Speicherzugriffsfehler zu bekommen. Danke,Michael |
Mitglied seit 05/2011
331 Beiträge
|
![]()
...also bei mir verhalten die sich gleich:
|
Mitglied seit 05/2011
331 Beiträge
|
![]()
...wer lesen kann ist klar im Vorteil! Nein es macht natürliche einen Unterschid:
char * a ist ein Pointer auf den konstanten String "hallo", während char a[] ein char-Array der Länge 6 ist, in den der konstante String "hallo" geladen wird. Der Compiler füllt die Klammer automatisch aus. Eigentlich steht da ja: char a[6] = "hallo";. P.s.: Man kann auch char a[100] = "hallo"; schreiben. Dann kann man danach strcpy(a, "Dieser String hat mehr als 6 Zeichen"); machen ohne das man über den reservierten Speicher schreibt. |
Mitglied seit 05/2011
79 Beiträge
|
![]()
Antwort auf Beitrag #1
Der Unterschied liegt darin, wo der String im Speicher liegt und welche Zugriffe dort erlaubt sind. Dein Beispiel versucht den String zu verändern, was nicht überall erlaubt ist.
char *a = "hallo"; Diese Anweisung reserviert Platz für einen Pointer auf dem Stack und zeigt auf den String. Der String selbst landet aber im Textsegment und ist dort unveränderbar. Eine Zuweisung wie in deinem Beispiel ist daher nicht möglich, wohl aber der lesende Zugriff auf a[i]. char a[] = "hallo"; Diese Anweisung reserviert Platz für ein Array auf dem Stack, in dem der String abgelegt wird. Sowohl lesende als auch schreibende Zugriffe mit a[i] sind möglich. |
Mitglied seit 07/2011
13 Beiträge
|
![]()
dann verwende ich also am besten immer char a[] = "bla" (oder char a[100] = "bla"), dann bin ich auf der sicheren seite und kann alles damit machen?
|
Mitglied seit 05/2011
331 Beiträge
|
![]()
Das kommt darauf an was du machen willst.
![]() ![]() |
Mitglied seit 07/2011
13 Beiträge
|
![]() mehr oder weniger ![]() |
Powered by the Unclassified NewsBoard software, 20110527-dev,
© 2003-8 by Yves Goergen