array größen



  • hallochen allerseits

    ich haben schon einiges mit delphi / pascal gemacht und kenne daher für array größen den befehl setlength(arrayname, neuegröße);

    das gleiche suche ich auch für c++, damit ich wenn ich setze

    char blubb[]="";
    cin >> blubb;
    

    keine probleme bekomme und versehentlich den speicher überschreibe. das passiert nämlich wenn ich die speicherreservierung nicht vornehne, wenn ich das nicht falsch verstanden habe.
    aber wie genau geht das? ich habe von "new" gelesen, aber nicht ganz hinbekommen wie das geht. ich habe halt einen array von einem char und möchte nun mit cin einen string einlesen und die länge des arrays entsprechend der länge meiner eingelesenen zeichenkette setzen.

    hope2get help

    new2cpp 🙄



  • Hi,
    Warum verwendest Du nicht einfach std::string?



  • Nunja, du müsstest den Speicher dynamisch (new) allokieren, wenn du weißt wie viel du brauchst.

    //Hab das selber noch nicht gebraucht, aber nach den Konventionen der STL könnte ich mir das so vorstellen...:
    char* string=new char[cin.size()];
    cin>>string;
    //Problem was ich mir denken könnte wäre, dass cin dann noch garnix eingelesen hat...
    

    Btw: da gibts so ne ganze tolle Erfindung, nennt sich std::string bzw. std::wstring oder, wenn du was ganz ausgefallenes willst std::basic_string<foo>



  • Hi,

    wäre es nicht einfacher mittels getline einzulesen anstatt mit cin? Das macht doch erheblich weniger Probleme mit Leerzeichen.



  • also mit std::string hab ich schon überlegt.

    allerdings brauche ich später sowieso das ganze noch als unsigned char und mit dem ganzen rumkonvertieren hatte ich eh schon schwierigkeiten und bis jetzt hat alles geklappt bis auf die länge der arrays halt. später schreibe ich nämlich einige daten in die registry. und die größe des arrays, die ich festlegen will, kenne ich leider eben erst nach dem einlesen. das ist das prob...

    hab das mal ausprobiert, ness.

    error C2039: 'size' : Ist kein Element von 'istream_withassign'

    meckert der compiler. compiler doof *g*

    aber ich hab selber grad ne idee... was ist, wenn ich einen array fester länge nehme und in den dann einlese und danach dann bis '\0' die größe festlege und die einzelnen zeichen kopiere? sollte klappen denk ich ma.

    melde mich zurück wenn ich was hinkrieg oder mich verrenne 😃



  • also so gehts:

    char test[10];
    	cin >> test;
    	char* astring = new char[sizeof(test)];
    	strcpy(astring, test);
    	cout << astring << " " << test;
    

    ich hatte vorher nämlich quasi:

    char test[10];
    	cin >> test;
    	char astring[] = "";
    	strcpy(astring, test);
    	cout << astring << " " << test;
    

    wobei das strcpy erst innerhalb einer klasse geschah. dadurch kamen dann speicherprobleme zustande und es standen merkwürdige sachen in dem array *gg*

    also falls einer auch mal das prob haben sollte und mit chars arbeitet mache er es so 🙂

    thx für die syntax mit new @ness

    new2cpp 🙄



  • Uh...ich bezweifle, dass das das macht, was du erwartest. Du kannst vorher nicht wissen, wieviel Zeichen die Eingabe nachher hat, sondern höchstens eine Obergrenze festlegen. Oder du machst es sinnvoll und benutzt string:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    // ...
    
    string text;
    cin >> text; // liest ein Wort ein
    getline(cin, text); // liest eine Zeile ein
    
    // und wenn du nachher unbedingt nen char* brauchst:
    char *p = text.c_str();
    


  • naja das würde fast klappen

    am ende brauche ich dann einen unsigned char... für einträge in die registry 🙄 kann ich da ganz enfach konvertieren von strings?

    und das, was ich jetzt gemacht habe, funktioniert erstmal. jetzt muss ich nur noch die funktion meiner klasse gescheit hinkriegen die mit dem eingelesen string rumspielt. ist eine XOR funktion btw, die sich auf buchstaben, ziffern und '' beschränkt. das getline sollte ich aber wohl trotzdem nehmen und ' ' in '' umändern, damit ich keine probs mit der funktion kriege. sonderzeichen werden danach sowieso ausgeschlossen und angemeckert wenn der user mal nicht macht was er soll *gg*

    thx so far

    new2cpp


Anmelden zum Antworten