Ist dieser Code ok??
-
#include <iostream> char* str = NULL; void fill() { str = "Teststring"; } int main() { fill(); std::cout << str; }
Ist das so ok oder kann der Code auch auf einigen Compilern abstürzen? Ich meine, ist es sichergestellt das der Compiler den "Teststring" als String-Literal behandelt und der String auch noch nach dem Aufruf der Funktion fill gültig ist??
-
Sollte kein Problem sein.
MFG fsd.
-
eh??
str erwartet eine adresse, weil es char* ist, also ein pointer auf char...
#include <iostream> #include <string> std::string str; void fill() { str = "Teststring"; } int main() { fill(); std::cout << str; }
oder?
-
#include <iostream> char* str = NULL; void fill() { str = "Teststring"; } int main() { fill(); std::cout << str; }
Hm, was ist "Teststring"?
Sicherlich nur etwas temporäres.
Und einen Zeiger auf etwas temporäres legen zu lassen ist ja nicht so sicher.#include <iostream> char* str[100]; void fill() { strcpy(str, "Teststring"); } int main() { fill(); std::cout << str; }
Wobei...
Du postest hier im C++-Forum, also ist Chickenmans Antwort richtiger.MFG MAV
-
entwender:
void fill(std::string & str) { str= "Testttring"; } oder std::string fill() { return std::string("Teststring"); }
Kurz: Globale Variablen vermeiden.
-
Der Code des OP geht aber auch, obwohl "const char*" besser wäre. "char*" geht nur aus Gründen der *ekel* Abwärtskompatibilität.
-
Der Code ist okay, wenn auch nicht schön!
str erwartet eine adresse, weil es char* ist, also ein pointer auf char...
Ein String-Literal wird implizit in ein Pointer umgewandelt
Hm, was ist "Teststring"?
Sicherlich nur etwas temporäres.
Und einen Zeiger auf etwas temporäres legen zu lassen ist ja nicht so sicher.String-Literale existieren während der ganzen Programm ausführung, dass sollte kein Problem sein.
-
"char*" geht nur aus Gründen der *ekel* Abwärtskompatibilität.
Hm, denke gerade dran.
AFAIK kann der neue g++ das nicht mehr. (Hab jetzt keine Lust zu testen. Kann ja jeder interressierte selber machen). Aber mit const char* sollte es funktionieren.MFG fsd.
-
fsdeveloper schrieb:
AFAIK kann der neue g++ das nicht mehr.
Natürlich kann er das.