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.


Log in to reply