Suspekte Wertveränderungen bei char durch Wertübergabe bei Funktionen



  • hi!
    Ich hab hier mal einen Codeschnipsel:

    struct qchar
    {
     unsigned char bytes[3];
    };
    
    qchar char2qchar(char c1, char c2, char c3, char c4)
    {
      qchar qc1;
      qc1.bytes[0]=c1;
      qc1.bytes[1]=c2;
      qc1.bytes[2]=c3;
      qc1.bytes[3]=c4;
      ShowMessage(qc1.bytes[3]);
      return qc1;
    }
    
    int qchar2long (qchar qc1)
    {
    ShowMessage(qc1.bytes[3]);
    signed int i1, i2, i3, i4;
    i1 = qc1.bytes[0];
    i2 = (int(qc1.bytes[1]) << 8);
    i3 = (int(qc1.bytes[2]) << 16);
    i4 = (int(qc1.bytes[3]) << 24);
    return i1+i2+i3+i4;
    }
    

    Wenn ich jetzt der Funktion char2qchar(char(50), char(0), char(0), char(0));
    übergebe, dann sagt die erste Meldung, dass das 4. char 0 enthält.
    übergebe ich jetzt das qchar, dass in der char2qchar()-Funktion enstanden ist an die Funktion qchar2long(), dann sagt die 2. meldung plötzlich, dass das 4. char vom qchar 247 ist. Wie kann das sein? Warum wird der Wert vom char nur durch die Wertübergabe verändert?

    Ich schreibe das hier ins C++Builder Forum, weil mir dieses Problem genau mit diesem entstanden ist. Bei Dev C++ gab's (in natürlich leicht veränderter Form) keine Probleme.

    Bitte helft mir!!

    mfg, chris90



  • Diese leicht veränderte Form würde mcih grundsätzlich mal interessieren...

    -junix

    EDIT: Ausserdem würde ich dir empfehlen mal zu überprüfen ob du nicht irgendwelche Bereichs überschreitungen in deinem char-Array betreibst?
    Tip: Die Antwort ist ja. Findest du auch den Grund dafür?



  • bytes ist ein Array von drei unsigned char und hat damit nur drei gültige Indices: 0, 1 und 2.



  • mom bytes[3] deklariert doch wohl ein char-array mit 4 mitgliedern, oder?
    Also das hätt ich jetzt nie geglaubt!



  • chris90 schrieb:

    mom bytes[3] deklariert doch wohl ein char-array mit 4 mitgliedern, oder?

    Falls das keine rethorische Frage war: nein, du hast ein Array mit drei Elementen. Du brauchst aber Platz für mindestens 4, wenn nicht sogar 5 (Null-Terminierung von char-Arrays).


Anmelden zum Antworten