Hallo ich habe Probleme mit const char * auf seltsame Weise die gleiche. Color :: Text() gibt ein statisches Char-Array zurück, aber es wird auch verwendet, um den Zeiger const char * für das Array zu initialisieren.Const char * seltsames Verhalten
wtf mache ich, wenn ich Rofl :: Standard, um tatsächlich zu arbeiten und nicht die neueste "const char" es Farbe :: Text produziert?
#include <windows.h>
class Color
{
public:
int R;
int G;
int B;
int A;
Color(int r, int b, int g, int a = 255)
{
R = r;
G = g;
B = b;
A = a;
}
const char* Text()
{
static char Texts[124];
snprintf(Texts, 124, "%i %i %i %i", R, G, B, A);
return Texts;
}
}
class rofl
{
public:
const char* Default;
const char* Value;
rofl(const char* d)
{
Default = d;
Value = d;
}
}
rofl dood("0");
rofl doaaod(Color(0,0,0).Text());
rofl xxxx(Color(0,55,0).Text());
int main()
{
printf("%s %s\n", dood.Default, dood.Value);
printf("%s %s\n", doaaod.Default, doaaod.Value);
printf("%s %s\n", xxxx.Default, xxxx.Value);
return 0;
}
der Ausgang ist:
0 0
0 55 0 0 0 0
0 55 0 0 55 0
Erstellen Sie im Konstruktor von 'rofl' einen Puffer (z. B. mit dem Operator' new') für 'Default' und' Value', auf den verwiesen wird. Kopieren Sie dann Daten in diese Puffer. Besser noch, verwenden Sie 'std :: string' Objekte anstelle von' char * ', und die dynamische Zuweisung wird sauber für Sie verwaltet. – Peter