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