Unter g++ gehts.. unter Windows nicht
-
Asgard schrieb:
Die Variable temp lebt nur so lange, wie foo() ausgeführt wird. In main() versuchst Du demnach auf eine Zeichenkette zuzugreifen, die eignetlich gar nicht mehr exististiert.
Daher kann Dein Programm eigentlich gar nicht richtig funktionieren. Mit dem gcc hast Du dann wohl bisher immer das Glück gehabt, dass der Speicher noch nciht wieder überschrieben wurde.Kannst du bitte Zeigen wie man es richtig macht einen char* zurückzugeben.
-
string foo() { ostringstream Str; long i=rand()%5, j=rand()%5, k=rand()%5, l=rand()%5; for(int a=1;a<4;++a) if(i==172 && j==a) { return foo(); break; } Str << i << '.' << j << '.' << k << '.' << l ; string temp(Str.str()); return temp; }
-
Wenn es auf unbedingt ein char* sein soll, würde ich es wahrscheinlich so machen (ist zumindest eine Möglichkeit):
const char* foo(string& temp) { //alles wie bei Dir return temp.c_str(); } int main() { srand((unsigned)time(NULL)); string temp; while(1) { cout << "zahl:\t" << foo(temp) << endl; } return 0; }
-
Asgard schrieb:
Die Variable temp lebt nur so lange, wie foo() ausgeführt wird. In main() versuchst Du demnach auf eine Zeichenkette zuzugreifen, die eignetlich gar nicht mehr exististiert.
Daher kann Dein Programm eigentlich gar nicht richtig funktionieren. Mit dem gcc hast Du dann wohl bisher immer das Glück gehabt, dass der Speicher noch nciht wieder überschrieben wurde.Asgard schrieb:
Wenn es auf unbedingt ein char* sein soll, würde ich es wahrscheinlich so machen (ist zumindest eine Möglichkeit):
const char* foo(string& temp) { //alles wie bei Dir return temp.c_str(); } int main() { srand((unsigned)time(NULL)); string temp; while(1) { cout << "zahl:\t" << foo(temp) << endl; } return 0; }
Hä?? Kann doch wohl nicht oder?
-
Was kann nicht sein?
-
Sorry, habe die Referenz übersehen.
-
Hi,
wieso lässt du dir nicht den string returnen und wandelst ihn dann in einen c_str um( in der Aufruffunktione, z.B. main()) ?
Gruß, '][' !
-
Muss man hier immer eine Variable als Parameter übergeben wenn man etwas zurückgeben will.
Geht nicht auch
string funktion() { string test("hallo"); return test; }
-
was mach ich dann bei sowas
int main() { foo("hallo"); } string foo(string test) { return test; }
-
nixwissen schrieb:
Muss man hier immer eine Variable als Parameter übergeben wenn man etwas zurückgeben will.
Ne, musst Du natürlich nicht. Eine Funktion wie
string func() { string test = "bla"; return test; }
funktioniert durchaus.
Du musst allerdings beachten, dass hier nicht die Variable test zurückgegeben wird, sondern eine Kopie von ihr.
Wenn eine Funktion jedoch einen const char* zurückgibt, so wird im Prinzip eine Adresse zurückgegeben - nämlich die, auf die der Pointer zeigt. Es wird keine Zeichenkette kopiert oder sowas. Das heißt, das in Deinem Fall eine Adresse von etwas zurückgegeben wird, das nach Beenden der Funktion nicht mehr existiert.