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(), ...


Anmelden zum Antworten