2 Stimmen

Stringifizierung bei einem Aufzählungselement

Ich muss ein Aufzählungselement (seinen Wert, nicht den Bezeichner) in eine Zeichenfolge konvertieren. Ich habe Folgendes versucht, das für ein MACRO (TYPE_A) funktioniert, aber nicht für einen Enum-Wert (typeA). Dies ist meiner Meinung nach ein wenig seltsam.

Haben Sie eine Idee, wie man das macht?

#define _tostr(a) #a
#define tostr(a) _tostr(a)

typedef enum _SPECIAL_FOLDER_ID {
    typeA = 3,
    typeB = 4,
} SPECIAL_FOLDER_ID;

#define TYPE_A 3

int main() {
    //this is working, but the information is a macro (TYPE_A)
    printf("The string is " tostr(TYPE_A) ".\n");

    //this is not working for typeA (defined in an enumeration)
    printf("The string is " tostr(typeA) ".\n");
    return 0;
}

Die Ausgabe ist:

The string is 3.
The string is typeA.

Ich muss den Code in irgendeiner Weise ändern, damit die zweite Zeile der Ausgabe "Die Zeichenfolge ist 3" lautet.

Gracias.

PS: Ich möchte den Wert nicht mit printf drucken. Ich brauche eine statische Zeichenfolge, die diesen Wert enthält. Ich verwende printf nur, um das Ergebnis zu testen...

0voto

qrdl Punkte 32507

Was ist falsch an der guten alten formatierten Ausgabe?

printf("The string is %d", typeA)

0voto

Martin Beckett Punkte 92477

Es gibt keine automatische Möglichkeit, dies zu tun, da der Compiler ENUMs in Literalzahlen umwandelt.

Der einfachste Weg ist, ein statisches Array von Strings zu haben und darauf zu achten, dass es synchron bleibt.

char names[][8] { "","","", "TypA", "TypB", etc }
Dann verwenden Sie einfach "names[typeA]".

Eine sicherere Methode ist eine Funktion mit einer großen switch-Anweisung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X