Char Array in einer Funktion ausgeben.



  • Welches new? Wo nutzt der TO dies?


  • Mod

    Er fordert den Speicher mit new an, kopiert seine Daten darein und löscht ihn nie.

    Nein: Er gibt die Adresse eines lokalen Objektes zurück. gammeln ist damit ein hängender Zeiger.



  • DirkB schrieb:

    Welches new? Wo nutzt der TO dies?

    Wooha, jetzt wo dus sagst. 😃

    Hab etwas nachlässig drüber gelesen. Und als die Deklaration mit den eckigen Klammern gesehen hab, hat mein Kopf ein new automatisch angenommen ohne weiter zu lesen.

    Dann nehme ich alles zurück (Nimmer trotzdem std::string!) und behaupte das Gegenteil. Sorry Jungs



  • manni66 schrieb:

    dachdecker schrieb:

    manni66 schrieb:

    Das geht nicht. Benutze std::string!

    Das ist ja ein toller Vorschlag nützt mir aber leider nichts 😞
    Ich brauch es als Char für meine Sqlite3 API später.

    Nein, brauchst du nicht. Die Funktion c_str von std::string reicht völlig.

    Der Herr Dachdecker hätte aber gerne, wenn möglich C++ Strings :).
    Ich weiß nämlich vorher nicht wie lang manche eingaben werden bzw. ich hab auch kein bock mich darum zu kümmern 😉

    Aber jetzt mal an die Allgemeinheit.
    Falls jemand von mir herausfindet wie man ein char array zurück gibt wäre ich ihm sehr verbunden.



  • Dachdecker schrieb:

    Der Herr Dachdecker hätte aber gerne, wenn möglich C++ Strings :).
    Ich weiß nämlich vorher nicht wie lang manche eingaben werden bzw. ich hab auch kein bock mich darum zu

    Der Herr Dachdecker ist wohl einmal zuviel vom Dach gefallen. Wovon rede ich denn die ganze Zeit?


  • Mod

    Dachdecker schrieb:

    Falls jemand von mir herausfindet wie man ein char array zurück gibt wäre ich ihm sehr verbunden.

    Gespaltene Persönlichkeit oder bloss zerstreut? 😕



  • Dachdecker schrieb:

    Falls jemand von mir herausfindet wie man ein char array zurück gibt wäre ich ihm sehr verbunden.

    Falls du es noch nicht mitbekommen hast: Das geht nicht.

    Ein Array existiert nach verlassen des Scopes, in dem es definiert wurde, nicht mehr. (hier am Ende der Funktion). Wie jede andere Variable auch.

    Du kannst den Speicher dafür dynamisch besorgen und den Zeiger darauf zurück geben.

    Aber was hast du gegen c_str von std::string ?
    Weißt du überhaupt was das macht?



  • Die Ausgabe funktioniert nur die Sache hat einen kleinen Haken.
    Eigentlich müsste ich ja E mit free(E) reinigen aber dann kann ich den Wert ja nicht mehr zurück geben :-(.

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    using namespace std;
    
    char &my_function(string a)
    {
        char * E;
         E = (char *) malloc(a.size());
    
        for(int i=0;i<a.size();i++){
            E[i] = a[i];
        }
    
        char *s = E;
     //   free(E);
    
        return *s;
    
    }
    
    int main()
    {
        string dumm = "dumm";
    
        cout << &my_function(dumm);
        return 0;
    }
    


  • Die Sache hat nur einen Haken: du wirst dumm sterben.



  • manni66 schrieb:

    Dachdecker schrieb:

    Der Herr Dachdecker hätte aber gerne, wenn möglich C++ Strings :).
    Ich weiß nämlich vorher nicht wie lang manche eingaben werden bzw. ich hab auch kein bock mich darum zu

    Der Herr Dachdecker ist wohl einmal zuviel vom Dach gefallen. Wovon rede ich denn die ganze Zeit?

    Ich ging davon aus du meinst string als parameter 🙂
    Nicht als das was mit return ausgegeben wird.

    manni66 schrieb:

    Die Sache hat nur einen Haken: du wirst dumm sterben.

    🙄



  • Dachdecker schrieb:

    Die Ausgabe funktioniert nur die Sache hat einen kleinen Haken.
    Eigentlich müsste ich ja E mit free(E) reinigen aber dann kann ich den Wert ja nicht mehr zurück geben :-(.

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    using namespace std;
    
    char &my_function(string a)
    {
        char * E;
         E = (char *) malloc(a.size());
    
        for(int i=0;i<a.size();i++){
            E[i] = a[i];
        }
    
        char *s = E;
     //   free(E);
    
        return *s;
    
    }
    
    int main()
    {
        string dumm = "dumm";
    
        cout << &my_function(dumm);
        return 0;
    }
    

    Häää?
    Ich denke du willst C++ Strings nutzen?
    malloc ist C und kein C++.

    Und so wie ich das auf den ersten Blick sehe in der SQLite-API wird ein const char* erwarten, den kriegst du von einem std::string per c_str Methode.

    Wo ist also dein Problem??

    Edit: Oder willst du X machen, denkst es geht per Y und anstatt nach X zu fragen, fragst du nach Y?!?



  • Skym0sh0 schrieb:

    Dachdecker schrieb:

    Die Ausgabe funktioniert nur die Sache hat einen kleinen Haken.
    Eigentlich müsste ich ja E mit free(E) reinigen aber dann kann ich den Wert ja nicht mehr zurück geben :-(.

    #include <iostream>
    #include <string>
    #include <stdlib.h>
    using namespace std;
    
    char &my_function(string a)
    {
        char * E;
         E = (char *) malloc(a.size());
    
        for(int i=0;i<a.size();i++){
            E[i] = a[i];
        }
    
        char *s = E;
     //   free(E);
    
        return *s;
    
    }
    
    int main()
    {
        string dumm = "dumm";
    
        cout << &my_function(dumm);
        return 0;
    }
    

    Häää?
    Ich denke du willst C++ Strings nutzen?
    malloc ist C und kein C++.

    Und so wie ich das auf den ersten Blick sehe in der SQLite-API wird ein const char* erwarten, den kriegst du von einem std::string per c_str Methode.

    Wo ist also dein Problem??

    Edit: Oder willst du X machen, denkst es geht per Y und anstatt nach X zu fragen, fragst du nach Y?!?

    Ich will nur ein Char Array zurück geben mehr nicht.
    Lasst euch von dem String beim funktionsparameter nicht verwirren Leute.

    Für Babys:

    return CharArray[]



  • dachdecker schrieb:

    Ich will nur ein Char Array zurück geben mehr nicht.

    Für Babys:

    return CharArray[]

    Für Begriffsstutzige:
    Das geht nicht!



  • der te will also einen std::string in einen c-string wandeln (manuell!) ohne ein proxy-objekt welches den dynamischen speicher des c-strings scope-übergreifend wieder frei gibt. dabei wurde er mehrfach auf die std::string-methode std::string::c_str() hingewiesen, was er ignorierte. nutz also c_str() oder lass das forum in ruhe, meine güte lol...

    edit: formulierung angepasst.



  • Vielleicht helfen ja dies beiden Beiträge weiter:

    http://www.c-plusplus.net/forum/138655

    http://www.c-plusplus.net/forum/53702



  • DirkB schrieb:

    Vielleicht helfen ja dies beiden Beiträge weiter:

    http://www.c-plusplus.net/forum/138655

    http://www.c-plusplus.net/forum/53702

    Das ist mal eine Sprache die ich verstehe danke 🙂
    Bis eben dachte ich ihr ignoriert mehr mich als ich euch :3
    Die ganze Zeit meinte ich ihr wollt Stur mich auf eine Methode verweisen die mir mir nichts bringt 😞

    Der Dachdecker meinte mit c_str meint ihr ich soll normale CharStrings verwenden.

    Mein Problem hat sich auch gelößt danke für eure Gedult :3



  • dachdecker schrieb:

    Das ist mal eine Sprache die ich verstehe danke 🙂
    ...
    Der Dachdecker meinte mit c_str meint ihr ich soll normale CharStrings verwenden.

    Dann hast du die falschen Fragen gestellt.
    Hinweise gab es:

    DirkB schrieb:

    Aber was hast du gegen c_str von std::string ?
    Weißt du überhaupt was das macht?

    Skym0sh0 schrieb:

    Oder willst du X machen, denkst es geht per Y und anstatt nach X zu fragen, fragst du nach Y?!?

    dachdecker schrieb:

    Die ganze Zeit meinte ich ihr wollt Stur mich auf eine Methode verweisen die mir mir nichts bringt

    Das die Antworten hier so einstimmig kamen, ist er selten 😃

    Dein Problem ist, das du weder C++ noch C in den Grundlagen kennst.
    Trotzdem willst du hier diese beiden verschiedenen Sprachen vermischen.

    Was verstehst du unter CharStrings?


Anmelden zum Antworten