printf und Struktur member



  • Hi
    ich habe eine structur

    typedef struct
    {
      char  deleted;
      char  code[11];
      char  combi[2];
      char  laenge[2];
      char  decimal;
      char  position[2]; 
      //weitere
    } ROUTINEN_STRUCT;
    
     ROUTINEN_STRUCT   routinenRecord;
    

    routinenrecord liefert mir Records aus einer Datenbank.
    Überprüfe ich die Grösse von routineRecord.code, ( sizeof) stimmt dies.
    ebenso wird code korrekt angezeigt, wenn ich es in einer for-Schleife mache.
    versuche ich jedoch "printf", wird zuviel angezeigt:

    printf("....x....1....x....2....x....3\n");
    printf("%s|\n",routinenRecord.code);
    //ergibt
    //....x....1....x....2....x....3
    //ACTH 01        001|
    

    es sollten 11 Zeichen gezeigt werden, nachgezählt sind es aber 18 🙄
    was habe ich da nicht verstanden?
    Hanns



  • Fehlende Initialisierung von routinenRecord => fehlendes Abschlussbyte('\0')
    von code => "Fehlausgabe" 😉



  • char code[11]; <- sollte 12 sein und code[11] = 0; Damit verhinderst du dann weitere ausgaben, das nennt sich Nullterminierung.

    MfG



  • evilissimo schrieb:

    char code[11]; <- sollte 12 sein und code[11] = 0; Damit verhinderst du dann weitere ausgaben, das nennt sich Nullterminierung.

    dann müsste in routinenRecord.fragefeld ( unsigned char9 das nach position kommt, ne 0x0 stehen.
    Die Datenbank liefert alles ohne hex-null zurück. dann kann ich mir ja auch einen
    entsprechdn langen String zurückgene lassen, und meine Member selber daraus basteln ( fürchte ich).

    Was muss ich denn "includen", und wie heißt die entsprechen funtion, um Teilstrings zu extrahieren ?

    Danke Hanns



  • char mycode[10] = {0};
    strncpy(mycode,routinenRecord.code,9); // Kopiert 9 Zeichen von routinenRecord.code nach mycode
    

    Da mycode 10 byte groß ist aber nur 9 kopiert werden, und ich vorher alle mycodefelder mit 0 initialisiert habe, ist der string mycode jetzt nullterminiert

    MfG


Anmelden zum Antworten