return char* wie gefährlich?
-
Wie gefährlich ist sowas:
char* OccupancyToString(Occupancy oc){ switch (oc) { case 0: return "\" \""; case 1: return "W_King"; case 2: return "W_Queen"; case 3: return "W_Rook"; case 4: return "W_Bishop"; case 5: return "W_Knight"; case 6: return "W_Pawn"; case 7: return "B_King"; case 8: return "B_Queen"; case 9: return "B_Rook"; case 10: return "B_Bishop"; case 11: return "B_Knight"; case 12: return "B_Pawn"; } return " "; }
wo werden die Strings "W_King", usw. angelegt? auf dem Stack? oder gibts da für const char* eine Sonderregelung, so dass sowas erlaubt ist?
-
Vertexwahn schrieb:
Wie gefährlich ist sowas: [...]
das ist ok, wenn auch nicht ganz so "C++-ig" sonder eher "C-ig" ;)Ich würd allerdings eher const char* zurückgeben.
wo werden die Strings "W_King", usw. angelegt? auf dem Stack? oder gibts da für const char* eine Sonderregelung, so dass sowas erlaubt ist?
im Datensegment.
-
Solange Du da nicht reinschreibst ist es nicht nur ungefährlich, sondern es ist optimal performant und leserlich und alles halt.
Gib char const* zurück.
String-Literale liegen in einem eigenen Speicher, nennen wir ihn mal ROM. Zum Beispiel in der exe, die in den Speicher gemappt wird.
-
Die Strings werden im statischen Speicherbereich angelegt, bestehen also bis zum Programmende.
Da die Veränderung eines Stringliterals undefiniertes Verhalten hervorruft, rät es sich, einen
const char*
zurückzugeben, um ein ungewolltes Beschreiben zu verhindern.