Probleme mit char
-
Hallo zusammen,
meine Anwendung soll die aktuelle Uhrzeit mit einem Wechsel von Buchstaben 'a''ab' in der Statusleiste ausgeben.
Das Resultat soll der Ausgabe in folgendem Format entsprechen:
"[ 09:52:31 ] [ a Working ]" =>Maske: "[ status_X1 ] [ status_X2 Working ]"Mein Problem ist, dass der Compiler folgenden Fehler ausspuckt:
error C2440: '=': 'const char [2]' kann nicht in 'char [2]' konvertiert werdenund ich nicht weiß, wie ich die Uhrzeit und die Buchstaben wie in der Maske formatiert ausgeben kann.

VOID CALLBACK Status_Message(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { static char status_X1[9], status_X2[2]; switch (idEvent) { case Timer_Time: GetTimeFormatA(LOCALE_USER_DEFAULT, 0, NULL, NULL, status_X1, _countof(status_X1)); case Timer_Slash: if(status_X2 == "a"){ status_X2 = "ab"; } else{ //status_X2 = "a"; } } char status_text[] = "[ 09:52:31 ] [ / Working ]"; :arrow_right: Muster SetDlgItemTextA(hWnd, IDC_STATUS, status_text); }Ich hoffe, ihr könnt mir helfen

Mfg, echo<delta>
-
Du kannst nicht an Arrays (status_X2) zuweisen und auch nicht direkt vergleichen!
Du könntest:
- einen std::string benutzen // Beste Wahl, IMHO
- die einzelnen Elemente zuweisen (status_X2[0] = 'a'; status_X2[1] = 'b'; ) und auch vergleichen
- strcpy() u. strcmp() benutzen, wenn du status_X2 groß genug machst ("ab" enthält 3 Zeichen!)Den std::string könntest Du zuweisen und vergleichen:
std::string status_X2; if(status_X2 == "ab") status_X2 = "a";EDIT: Fehlen bei dir die 'break's nach dem 'case' ?
-
Danke für deine schnelle Antwort, nur leider kann ich damit nur die Hälfte anfangen :). => Schreibe erst seit kurzem in C++.
Am besten wäre ein Codebeispiel. So, wie ich das verstanden habe, kann dann
case Timer_Slash: if(status_X2 == "a"){ status_X2 = "ab"; } else{ status_X2 = "a"; }so bleiben, wie es ist.
Folgende fragen sind noch offen:
1. Ich brauche eine static Variable, von welchem Typ? (String
)
2. Was muss ich dann in GetTimeFormatA ändern?
3. Und wie kann ich dann die Daten, wie in der Maske ausgeben?Mfg, echo<delta>
-
Der case-Zweig kann nicht so bleiben. Du musst jeden case-Zweig mit einem "break;" abschließen, sonst wird der darauf folgende Zweig ebenfalls ausgeführt.
//wenn var==0 ist, werden die Zweige für 0 und 1 ausgeführt, da case 0 nicht mit einem break beendet wird. switch(var) { case 0: //mache was case 1: //mache was anderes break; //bei var==1 wird nur dieser Zweig ausgeführt und danach aus dem switch gesprungen case 2: //mache wieder was break; }std::string ist ein C++-Datentyp, der komfortabler ist als die alten char-Arrays. Damit kannst du, wie schon erwähnt wurde, Variablen einfach wie z.B. ints vergleichen (so, wie man es aus anderen Sprachen gewöhnt ist).