warum will er das nicht?
-
Sorry, wenn das Topic nicht grade viel aussagt. (wollte nur nicht damit abschrecken, dass ich auf nem Großrechner arbeite)
Ich habe in meinem Programm folgendes Problem:
Historisch gewachsen sind die meisten Programme auf diesem Großrechner in Assembler und COBOL gebaut worden.
Seit einiger Zeit werden aber auch C-Programme geschrieben.Ich hab nun eine Datenstruktur, die nach C portiert so aussieht :
typedef struct { char RCWert1 , Untermeldung[3]; } tReturn;
Ist zwar nicht schön, aber ich soll halt kompatibel zum anderen sein..
Nun möchte ich eine Instanz der Struktur auf einen Returncode testen.
Das sieht bei mir so aus :
if (strcmp ((char*)ReturnCode, RET_OK) == 0) { .. }
Hier bekomme ich beim Cast die Fehlermeldung "Ungültige Typ-Konvertierung"
Aber warum?
Sollte der Compiler das nicht wortlos tun? Immerhin isses nen ANSI-Compiler..
-
Mach ne union draus:
typedef struct { char RCWert1 , Untermeldung[3]; } tReturn_detail; typedef union { tReturn_detail detail; char all[4]; } tReturn; ... tReturn ReturnCode; ... ReturnCode.detail.RCWert1 = 'A'; strcpy(ReturnCode.detail.Untermeldung, "BC"); ... if(!strcmp(ReturnCode.all, RET_OK)) { ... } ...
Bei Untermeldung das Stringendezeichen nicht vergessen! Wenn also bei Untermeldung 3 Zeichen eingetragen werden sollen, dann brauchst du Speicherplatz für 4 Zeichen. Wenn das nicht geht, dann musst du sehr gut aufpassen, wenn du Stringfunktionen verwendest
Am besten die Funktionen verwenden, bei denen du die Anzahl an Zeichen begrenzen kannst, also z. B. strncpy(), strncmp(), ...