Hilfe Zeiger

Hallo,

ich hab mit folgendem Program ein Problem:

#include
#include
int main()
{
char *text=„test“;
char *ptr=NULL;
ptr=text;
printf(„Inhalt von text: c\n“,*text); //Ausgabe:>t
ptr[0]=‚a‘;
printf(„Inhalt von text: %\n“,*text); //Ausgabe:>a
ptr[1]=’\0’;
printf(„s\n“,text); //Ausgabe:>test
return 0;
}

Ich verstehe nicht warum am Ende „test“ ausgegeben wird und nicht einfach nur „a“. Compiliert habe ich es einmal mit dem MS Visual Studio 2005 und unter Linux. Unter Linux startet das Program gar nicht erst sondern bricht gleich mit einer Fehlermeldung (Speicherzugriffsverletzung) ab.
Ich hoffe jemand kann mir weiterhelfen und mir sagen wo der Fehler liegt.

mfg bluesky388

Hallo,

ich hab mit folgendem Program ein Problem:

[schlecht abgetippter Quelltext mit 1 Fehler pro Zeile]


Ich verstehe nicht warum am Ende „test“ ausgegeben wird und
nicht einfach nur „a“. Compiliert habe ich es einmal mit dem
MS Visual Studio 2005 und unter Linux. Unter Linux startet das
Program gar nicht erst sondern bricht gleich mit einer
Fehlermeldung (Speicherzugriffsverletzung) ab.
Ich hoffe jemand kann mir weiterhelfen und mir sagen wo der
Fehler liegt.

„Der Fehler“?

Ich möchte Dir nicht die „Herausforderung“ abnehmen,
das selbst hinzubekommen. Daher von meiner Seite
nur ein unkommentierter funktionierender Quelltext,
der wahrscheinlich das macht, was Du vorhattest (?).

 #include 

 int main()
{
 char text[] = "test";
 char \*zeiger = text;
 printf("Inhalt von text: %s\n", text); 
 
 zeiger[0] = 'a';
 printf("Inhalt von text: %s\n", text); 
 
 zeiger[1] = '\0';
 printf("Inhalt von text: %s\n", text); 
 
 return 0;
}

Viele Grüße

CMБ

Hallo bluesky388,

Ich verstehe nicht warum am Ende „test“ ausgegeben wird und
nicht einfach nur „a“. Compiliert habe ich es einmal mit dem
MS Visual Studio 2005 und unter Linux. Unter Linux startet das
Program gar nicht erst sondern bricht gleich mit einer
Fehlermeldung (Speicherzugriffsverletzung) ab.

Linux hat recht, VC tickt da nicht ganz sauber.

Ich hoffe jemand kann mir weiterhelfen und mir sagen wo der
Fehler liegt.

Du solltest die Kapitel, zur Speicherverwaltung einmal lesen.
Besonders die Eigenrschaften des Segmente CONST.
Auch das Schlüsselwort „const“ sollte dir etwas Erleuchtung bringen.

Und noch ein kleiner Typ:
Stell bei deinem Compiler immer die höchste Warnstufe ein, ist bei VC Stufe 4, dann motzt der Compiler auch schon bei kleinen Fehlern und unsauberkeiten rum.

Erst wenn du C-Profi bist, kann es vorkommen, dass der Compiler mal falschen Alarm gibt, aber dann kennt man andere Möglichkeiten, es dem Compiler beizubringen, dass man das so machen muss :wink:
Bis dahin, hat der Compiler immer recht mit seinen Warnungen !!

MfG Peter(TOO)

Auch hallo.

Ich verstehe nicht warum am Ende „test“ ausgegeben wird

Hm…
Win2K, MS Visual Studio C++ 6.0: „Inhalt von test:c“
Und dann eine Meldung von wg. Zugriffsverletzung

Vielleicht hilft diese Lektüre weiter: http://www.highscore.de

mfg M.L.

Das war nicht wirklich mein Problem, das c bzw %c war einfach nur falsch abgetippt. Na wie dem auch sei mittlerweile hab ich ja die Antwort von Peter(TOO) erhalten. Der String wird als Konstante definiert wenn man es so schreibt :smile:
Also danke an Peter und alle anderen, bitte spart euch eure neunmalklugen Belehrungen, danke.

mfg bluesky388

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo bluesky388,

Na wie dem auch sei mittlerweile hab ich
ja die Antwort von Peter(TOO) erhalten. Der String wird als
Konstante definiert wenn man es so schreibt :smile:
Also danke an Peter und alle anderen, bitte spart euch eure
neunmalklugen Belehrungen, danke.

Naja, du sollst es ja lernen, und wenn wir da einfach ein paar Zeilen Code abändern, tappst du beim nächsten mal wieder in die selbe Falle.
Und Handbücher abtippen, mag hier halt keiner …

Aber zum Trost, jeder ist da schon mal reingetappt, als er noch Anfänger war :wink:

MfG peter(TOO)