Frage zu char*



  • Hi!

    Wäre soetwas ein legaler C++ Code, der auf jeder Plattform läuft?

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
    
       char* buffer = "";
       while(!cin.get())
       {
          system("cls");
          cout << buffer << endl;
          cin >> buffer;   
    
       }
    
    }
    

    Muss ich buffer zuerst allokieren?



  • 1.in main fehlt return 0!
    2.natürlich musst du den buffer zuerst allokieren.
    3.die funktion system sollte vermieden werden.



  • hmm, warum funktioniert das programm dann so bei mir?(VC++ 7.1 und Windows 2000)



  • Hallo,

    Japp, speicher musst du wenigstens vorm cin>>buffer allocieren.
    Naja es würde mal abgesehen davon auf jedem system laufen, aber es würde nicht auf jedem System machen was du erwartest. Auf nem unix würde system("cls") nicts bringen, es sei denn du hast vorher nen Alias für clear angelegt oder so.



  • 1.) int main() funktioniert auch ohne return. Ausnahme gemäss Standard.
    2.) Weil du durch dein cin >> buffer möglicherweise mehrere zeichen einliest die dann als Speicherschreiber dein Programm kaputtmachem, sollte man zuerst Speicher für buffer allokieren. In der Praxis kann das "zufällig" funktionieren. Es kommt ganz drauf an was an der Stelle Buffer grade für Daten oder Code abgelegt sind.



  • Das Verändern von Stringliteralen ruft lt. Standard undefiniertes Verhalten hervor. Ein gcc-Programm stürzt beispielsweise ab.



  • 1.in main fehlt return 0!

    [Klugscheissmodus on]
    nein fehlt nicht... der standard schreibt imho nicht vor das man return 0 bei main verwenden muss... es wird automatisch 0 an die shell zurückgeliefert wenn du nix anderes hinschreibst...
    [Klugscheissmodus off]



  • Windalf schrieb:

    1.in main fehlt return 0!

    [Klugscheissmodus on]
    nein fehlt nicht... der standard schreibt imho nicht vor das man return 0 bei main verwenden muss... es wird automatisch 0 an die shell zurückgeliefert wenn du nix anderes hinschreibst...
    [Klugscheissmodus off]

    hat Fireball schon gesagt.

    na ja, doppelt hält vielleicht länger 😉



  • hat Fireball schon gesagt.

    na ja, doppelt hält vielleicht länger

    *au* ich sollte mir angewöhnen Beiträge komplett zu lesen und nicht mittendrinnen aufzuhören...


Anmelden zum Antworten