getline / 3. Parameter



  • Warum geht das hier nicht:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        char a[20];
        getline(a,19,'h');
        cout << a << endl;
        return 0;
    }
    

    ???
    MfG
    Stromberg





  • Geht nur mit strings oder wie?



  • Stromberg schrieb:

    Geht nur mit strings oder wie?

    Warum nicht, ist doch sogar besser 😉



  • Aber dann schau dir mal des Tutorial hier an, runter zum Code scrollen, warum geht das dann bei dem? Oder ist das einfach falsch?
    Bsp:

    cin.getline(array, sizeof(array),'.'); //Müsste das eigentlich nicht sizeof(array)-1 sein? Weil da muss doch noch Platz für das Nullzeichen bleiben oder?
    

    http://www.cpp-tutor.de/cpp/le04/le04_02_d1.htm
    MfG
    Stromberg



  • std::cin.getline(); ist etwas anderes als std::getline(), ganz einfach 😉



  • Ach so, okay.
    Aber das hier verstehe ich noch nicht:

    ...
    char a[20];
    cin.getline(a,sizeof(a)); //sizeof a müsste ja 20 sein?!
    ....
    

    Warum sizeof(a), das ist doch falsch oder? Man muss doch immer auf das Nullzeichen achten, also passen da doch nur 19 Zeichen rein, weil das 20te ist ja '\0'!?
    Oder hab ich grad n Denkfehler?
    MfG
    Stromberg



  • Nein:

    Maximum number of characters to store (including the ternimating null character).
    This is an integer value of type streamsize.
    If the function stops reading because this size is reached, the failbit internal flag is set.



  • Also wenn ich 20 angebe, dann weiß cin.getline schon das eins von den 20 Zeichen das Nullzeichen ist?



  • Stromberg schrieb:

    Also wenn ich 20 angebe, dann weiß cin.getline schon das eins von den 20 Zeichen das Nullzeichen ist?

    Nein, dann weiß cin nur, dass dein Buffer 20 Byte groß ist und er davon buf[0] bis buf[19] ansprechen darf - logischerweise wird es dann nicht mehr als 19 normale Zeichen plus Nullzeichen reinschreiben .



  • Also nach 19 bricht er ab, und hängt dann noch n Nullzeicheichen mit hin?
    Weil in dem Tut das ich gerade mache, steht, man soll immer noch zum Schluss vorsichtshablber ein Nullzeichen mithinhängen (char a[20-1]='\0'), weil wenn man mehr als die mximal angegeben Anzahl von Zeichen eingibt, dann schreibt cin 20 Zeichen rein, und hängt kein Nullzeichen mehr an!? Oder wie ist das nochmal?
    MfG
    Stromberg



  • Hm, also soweit ich weiß musst du deinen Puffer nicht "vorbereiten", also mit '\0' versehen; sonst bräuchte getline ja auch nicht mehr die Größe des Puffers!
    Mach es am besten so, wie du es unten schon gepostet hattest:

    char a[20];
    cin.getline(a,sizeof(a));
    

    🙂

    Ich will dich aber hiermit nicht davon abhalten, zu fragen! Ich find's toll zu beobachten, wie du deine Fortschritte machst und dir eben auch über solche Dinge Gedanken machst 😉


Log in to reply