Zeiger



  • Hallo,

    hab mal ne Frage zu folgendem Code

    #include <iostream>
    using namespace std;
    
    int main()
    {
        char word[] = "Panama-Kanal", *p = word;
        cout << *p << endl;                         // P
        cout << *p-2 << endl;                       // ASCII P = 80d - 2d = 78d
        cout << *(p+3) << endl;                     // a
        p++;
        cout << *p << endl;                         // a
        (++p)++;
        cout << p << endl;                          // ama-Kanal
        p = word;
        *(p+3) = 0;              
        cout << p << endl;                          // hätte hier Pan0ma-Kanal
                                                    // anstatt Pan erwartet
        char dummy;
        cin >> dummy;
        return 0;
    }
    

    Es geht mir eigentlich nur um folgende Zeile:

    *(p+3) = 0;

    Hat diese Zeile die gleiche Wirkung wie

    *(p+3) = '\0';

    falls ja könnt ihr mir dann mal erklären warum das das gleiche bewirkt. Bei dem einen wird doch der String beendet mit \0 bei dem anderen doch nicht weil das \ fehlt oder?



  • '\0' ist das char mit dem wert 0.
    0 ist ein int mit dem wert 0 und wird vom compiler implizit in char '\0' konvertiert.
    Kurt



  • ein string wird mit einem byte beendet das den wer 0 hat
    also die bitfolge 00000000

    *(p+3) = 0; //dem byte wird 0 zugewiesen
    *(p+3) = '\0'; //dem byte wird 0 zugewiesen
    *(p+3) = '0'; //dem byte wird der ascii code der ziffer 0 zugewiesen
                  //ka welcher das is aber definitiv nich 0
    

Anmelden zum Antworten