Anfänger Problem char*



  • char* test()
    {	
    	char cs[5]="Test";
    	return &cs[5];
    }
    int main (void)
    {
    	char* s;
    	s = test();
    	return 0;	
    }
    

    im s steh einfach Blödsinn, warum 😕



  • return &cs[5]; // die Adresse des fünften Zeichens? nicht wirklich oder? Zumal dir diese Adresse nie gehörte (cs hat 5 Elemente, also 0..4).

    Außerdem must du dir mal lokale Variablen angucken. durch return wird test verlassen. Somit werden die lokalen Variablen, somit auch cs, zerstört.



  • damit cs nicht zerstört wird kannst du's dynamisch erstellen mit new... dann musst du den speicher später aber mit delete wieder freigeben 😉 schöner finde ich diese methode:

    void test(char* cs)
    {
        strcpy(cs, "Test");
    }
    

    also einfach einen char-pointer / char-array als parameter übergeben, evtl noch die größe des buffers checken da strcpy soweit ich weiß keine bereichsüberprüfung macht 😉

    auf nummer sicher geht man natürlich mit std::string's ^^

    cya 🙂



  • ja eigentlich deswegen lokale Variablen weil

    char* test(char* cs)
    {
    	char ts[5];
    	for(int i =0;i<=strlen(cs);i++)
    	{	
    		ts[5] = cs[i];		//char bearbeiten
    	}	
    	return &ts[5];// bearbeiteten char zurückliefern
    }
    int main (void)
    {
    	char* s;
    	s = test("test");// ???????
    	return 0;	
    }
    

    was ich nicht vertstehe ist, dass beim return &ts[5]; steht richtigen wert
    und beim s = test("test") nicht ?????



  • #include <string>
    using namepsace std;
    ...
    
    string test(string cs)
    {
        string ts (cs);
        return ts;
    }
    
    int main (void)
    {
        string s = test("test");
        return 0;    
    }
    

    Und wie bereits gesagt:

    return &ts[5];
    

    ist quatsch

    return &ts[0];
    

    oder

    return ts;
    


  • char* schrieb:

    was ich nicht vertstehe ist, dass beim return &ts[5]; steht richtigen wert und beim s = test("test") nicht ?????

    die werte siehste per debugger und haltepunkten wa ;)? der grund dafür dass ts beim return den richten wert hat und bei s = test("test") nicht ist einfach der, dass ts zu dem zeitpunkt wo s die adresse von ts zugewiesen wird schon gar nicht mehr existiert, da der gültigkeitsbereich von ts (nämlich die funktion test) verlassen wurde. mach's am besten mit std::string's, hat helium ja grad den code gepostet 🙂

    cya 🙂



  • was ich nicht vertstehe ist, dass beim return &ts[5]; steht richtigen wert und beim s = test("test") nicht ?????

    Auch, wenn MagiC Creator nochmals was dazu gesagt hat, würde ich dazu gerne meine erste Antwort zitieren:

    Ich selbst 😉 schrieb:

    Außerdem must du dir mal lokale Variablen angucken. durch return wird test verlassen. Somit werden die lokalen Variablen, somit auch cs, zerstört.



  • ja aber wie mache ich dann meine for schleife mit string, da ich den string bzw. char bearbeiten will und dass kann ich nur sagen wir 😉 in eine for schleife



  • http://www.sgi.com/tech/stl/basic_string.html

    std::string beitet einen operator []

    string foo = "Hallo";
    
    foo[0] = 'h';
    
    cout << foo;  // hallo
    


  • ok danke leute 👍


Anmelden zum Antworten