string in char array



  • hallo,
    ich hatte folgende aufgabe :

    Write a program that reads a string into a char array from std in. Explain how varying size inputs are handled. Test the program by giving it a string longer than the array size allocated.

    meine lösung ist

    #include <iostream>
    #include <string>
    #include <vector>
    #include <bitset>
    #include <cstring>
    using namespace std;
    
    int main() {
    
    string str;
    cin >> str;
    size_t vec = str.size();
    char stringchar[vec];
    
    for (int i=0; i<vec; i++)
    {
    stringchar[i] = str[i];
    cout << stringchar[i];
    
    }
    
    }
    

    irgentwie glaube ich das ich die aufgabe falsch verstanden habe. sollte ich der char array einen festen wert geben ?



  • Du bist schon eine Stufe weiter. Der Aufgabensteller will eigentlich nicht, dass du std::string benutzt, sondern es klingt nach einer C-Aufgabe. Da hat man dann Probleme, weil man die Eingabelänge nicht kennt, die du mit std::string prima umgehst.

    BTW: Dein char-Array ist um ein Element zu klein. Du hast die Nullterminierung vergessen.



  • ups stimmt danke 🙂



  • Eine Sache, die ich übersehen habe: Du musst das char-Array in C++ dynamisch anlegen, weil die Größe vorher nicht bekannt ist.

    Aber eigentlich macht die Aufgabe in C++ keinen Sinn, weil man eh std::string und keine char-Arrays benutzen will 😉



  • kannst du mir sagen wie ich das char array dynamisch anlegen kann ? das würde mich jetz interessieren 🙂



  • char * stringchar = new char[vec];
    


  • danke,

    kann mir jemand sagen wofür man dynamische arrays braucht ? ich meine mich zu erinnern das wenn der wert in runtime nicht bekannt ist, man eine dynamische array benutzen muss.

    aber warum habe ich dann kein problem mit meinem programm ?



  • kantaki schrieb:

    ich meine mich zu erinnern das wenn der wert in runtime nicht bekannt ist, man eine dynamische array benutzen muss.

    Nein, dynamische Arrays benutzt man, wenn die Länge zur Compilezeit nicht bekannt ist.

    kantaki schrieb:

    aber warum habe ich dann kein Problem mit meinem programm ?

    Weil du einen Compiler benutzt, der eine non-Standard Erweiterung hat, die VLAs (Variable Length Array) erlaubt. In C ist das meines Wissens Standard, in C++ nicht.

    Mein MSVC2010 spuckt dabei zum Beispiel Zähne:

    1>main.cpp(13): error C2057: expected constant expression
    1>main.cpp(13): error C2466: cannot allocate an array of constant size 0
    1>main.cpp(13): error C2133: 'stringchar' : unknown size
    1>main.cpp(15): warning C4018: '<' : signed/unsigned mismatch
    


  • ah okay danke 🙂


Log in to reply