Bermudadreieck Problem



  • Hallo ich habe ein Problem und komme mir vor wie im Bermudadreieck. Ich habe schlichtweg keine Erklärung für das Phänomen hier erst mal der Code.

    {
    fprintf(fpout1,"<tr>\n<td>%s/%s - %s/%s</td>\n<td>%s</td>\n</tr>",pscItemSchools[iCount]->sccMonthBeg,pscItemSchools[iCount]->sccYearBeg,
    pscItemSchools[iCount]->sccMonthEnd,pscItemSchools[iCount]->sccYearEnd,pscItemSchools[iCount]->sccText);
    }
    

    Mit der Speicherallocation ist auch alles Glatt gegangen. Das weiß ich aus dem Grund weil die Stukturvariablen die richtigen Werte haben. Beim Debuggen weisen alle Werte den normalen inhalt auf. Nur bei obiger Routine passiert was ganz merkwürdiges. wenn alle Variablen nur ein Zeichen enthalten bekomme ich die richtige Ausgabe. z.b.
    1/2-10/2 der weitere Text.

    sobald ich aber versuche ein komplettes datum einzugeben also 10/2003 und 10/2004

    passiert sowas:
    10 2004 10 2005 Hier der Text /2004 10 2005 Hier der Text - 10 2005 Hier der Text /2005 Hier der Text
    rauskommen sollte aber 10/2004-10/2005 Hier der Text

    Wenn ich nur mit einem Zeichen arbeite geht alles klar hier zum Vergleich:
    1 /1 - 1 /1 Hier der Vergleichstext

    Die Variablen enthalen aber den richtigen Wert. Gibt es eine Besonderheit bei fprintf?.

    Wie gesagt voll Bermudadreieck Problem

    Hier noch die Stukturdeklaration :
    typedef struct
    {
    char sccMonthBeg[3];
    char sccYearBeg[5];
    char sccMonthEnd[3];
    char sccYearEnd[5];
    char sccText[lengthmax];
    }scItem;

    Es sieht so aus als ob dabei jedes mal der Rest der Struktur ab der Strukturvariablen bis zum Ende ausgegeben wird.
    Danke und cu



  • Schmeiß mal deinen Debugger an und überprüfe, ob auch bei jedem String das Stringendezeichen richtig gesetzt ist oder woran es sonst liegen könnte ;).



  • Ich weiß nicht ob das eine compilerspezifische Besonderheit ist. Aber der Debugger zeigt da wo die terminierende null stehen sollte ein \n. In der Ausgabe ist aber kein Zeilenvorschub zu erkennen. Möglicherweise hat das mit der Art zu tun wie ich die Zeichen von stdin einlese. Ich habe gelesen beim einlesen über fgets wird ein \n Zeichen im Puffer abgelegt. Ich denke damit ist der Tastarurpuffer gemeint?

    Hier so lese ich die Zeichen ein.

    printf("%s",pszBegMonth);
     fflush(stdin);
     fgets(cBuffer1,length1,stdin);
     printf("%s",pszBegYear);
     fflush(stdin);
     fgets(cBuffer2,length2,stdin);
     printf("%s",pszEndMonth);
     fflush(stdin);
     fgets(cBuffer3,length1,stdin);
     printf("%s",pszEndYear);
     fflush(stdin);
     fgets(cBuffer4,length2,stdin);
     printf("%s",pszDescription);
     fflush(stdin);
     fgets(cBuffer5,lengthmax,stdin);
    

    Später kopiere ich die Strings in die Endvariablen.

    strcpy(pscItemSchools[iCount]->sccMonthBeg, cBuffer1);
     strcpy(pscItemSchools[iCount]->sccYearBeg, cBuffer2);
     strcpy(pscItemSchools[iCount]->sccMonthEnd, cBuffer3);
     strcpy(pscItemSchools[iCount]->sccYearEnd, cBuffer4);
     strcpy(pscItemSchools[iCount]->sccText, cBuffer5);
    


  • Deine Vermutung war richtig. Es lag an der terminierenden null. Habe nun die Zeichenanzahl die einzlesen ist verändert.

    Danke und cu



  • Das fflush(stdin) kannst du dir bei fgets() eigentlich sparen. Und du solltest es eigentlich generell nicht verwenden. Warum, steht in der FAQ :).


Anmelden zum Antworten