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 ostream das, wenn man nach void * castet.


  • Mod

    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


Anmelden zum Antworten