Zeiger Problem
-
Hi, ich hab mich etwas mit Zeigern und C-Strings befasst und hab ein kleines Problem Produziert. In folgendem Code:
#include <iostream> using namespace std; int main() { char cstring1[] = "Ich bin ein C-String"; char cstring2[] = "Ich auch"; char adam = 'A'; char* cptr = 0; cptr = &adam; cout << " cptr: "<< cptr << endl; cout << "*cptr: "<< *cptr << endl; cout << "&cptr: "<< &cptr << endl; cout << "cstring1: " << cstring1 << endl; cout << "cstring2: " << cstring2 << endl; return 0; }In der Zeile
cout << " cptr: "<< cptr << endl;gibt das Programm "AIch auch" aus. Sollte es nicht stattdessen die Adresse von adam ausgeben???
-
C-Strings müssen Null-Terminiert sein (das heißt am Ende der Zeichenkette steht ein 0-Byte). Dein C-String ist dies nicht.
-
Honky schrieb:
"AIch auch" aus. Sollte es nicht stattdessen die Adresse von adam ausgeben???
Vielleicht macht
ostreamdas, wenn man nachvoid *castet.
-
Zur Erklärung: es ist richtig, dass beim Ausgeben von Zeigern mit einem ostream normalerweise die Adresse ausgegeben wird. Der ostream-Operator<< besitzt aber noch eine spezielle Überladung für Zeiger auf char. Diese werden als C-Strings aufgefasst und entsprechend bis zum nächsten Nullzeichen ausgegeben.
-
Janjan schrieb:
C-Strings müssen Null-Terminiert sein (das heißt am Ende der Zeichenkette steht ein 0-Byte). Dein C-String ist dies nicht.
Aber C-Strings werden doch Automatisch 0-Terminiert, wenn man sie mit den Hochkommata initialsiert oder?
-
Honky schrieb:
char adam = 'A'; char* cptr = 0; cptr = &adam; cout << " cptr: "<< cptr << endl;Nach dem 'A'-Byte kommt kein 0 byte beim char* "cptr".
-
Honky schrieb:
Janjan schrieb:
C-Strings müssen Null-Terminiert sein (das heißt am Ende der Zeichenkette steht ein 0-Byte). Dein C-String ist dies nicht.
Aber C-Strings werden doch Automatisch 0-Terminiert, wenn man sie mit den Hochkommata initialsiert oder?
Dein cstring1 und cstring2 sind C-Strings, also 0-terminiert, dein char adam jedoch nicht.
Gruß freeG