Dummes Problem mit char*



  • Hallo,
    ich scheine irgendwie gerade die c-Probleme gepachtet zu haben...
    Ich hoff, mir kann jmd. weiterhelfen!

    Ich schreibe Strings aus einem char*-Feld (strings[nStrings])binär in eine Datei. Das mache ich so, dass ich jedes Zeichen einzeln schreibe, also:

    for(int i=0;i<nStrings;i++) {
      for(int j=0;j<strlen(strings[i]);j++) {
        strncpy(c,&strings[i][j],1);  
        os.write( (char*) &c , sizeof(char) );
      }
    }
    

    Das Problem ist jetzt, dass manchmal nach dem String noch ein "ÿÿÿÿ" geschrieben wird und ich hab ehrlich gesagt keine Ahnung warum!
    Was bedeutet dieses "ÿÿÿÿ"???
    DANKE! Gruss, Tobias

    [ Dieser Beitrag wurde am 17.05.2003 um 17:49 Uhr von tobis79211 editiert. ]



  • Wo siehst du, dass er dieses komische Zeichen schreibt? Anders gefragt: Weißt du, dass der Algorithmus, der die Strings wieder einliest, korrekt arbeitet?

    Tip: Du gehst beim LESEN wahrscheinlich über EOF drüber.

    Man kann das übrigens einfacher schreiben:

    for (int i = 0; i < nStrings; ++i)
      os.write(strings[i], strlen(strings[i]));
    


  • Hi Bashar,

    ich sehe in der geschriebenen Datei, dass die Zeichen hinten dran sind, also z.B. steht in der Datei in einer Zeile:
    "Tobias Denzlingenÿÿÿÿ"
    in einer anderen steht wieder nur:
    "Thomas Freiburg"

    ...ich versteh nicht, warum manchmal diese "ÿ" da sind, dann wieder nicht!
    (Würde zumindest mehr Sinn geben, wenn die immer da wären!)
    Null-Terminiert sind die Strings auf jeden Fall alle.

    Also, wenn Du (oder jmd. anders) irgendeine Idee hat, dann bitte mir mitteilen!
    Gruss, Tobias



  • http://pw1.netcom.com/~tjensen/ptr/pointers.htm

    ein string in C ist dadurch definiert, dass er mit dem zeichen '\0' beendet wird.

    du setzt dieses zeichen nirgends...



  • ähm, wie meinst du? Die Strings sind schon Null-Terminiert!

    Also zur Vorgeschichte:
    Ich habe eine C++-DLL (um die es gerade geht), die aus einer MFC-Anwendung raus gefüllt wird.
    Die einzelnen Strings bekomme ich mittels eines eines Textfeldes in einem Dialogfeld.
    Die Strings werden dann (alle!) folgendermassen zu einem char*-Pointer umgewandelt:

    CString cs;
    char a* = cs.GetBuffer( cs.GetLength() );

    Laut MSDN ist dieser Pointer auch Null-Terminiert!

    Und jetzt werden alle einfach wie oben beschrieben geschrieben.
    Wo ist denn da ein Problem dabei?
    Gruss, Tobias



  • was vielleicht auch noch erwähnenswert ist:

    ich schreibe ja momentan immer die Zeichen von 0 bis strlen(...)
    VOR den String schreibe ich dann als int noch strlen(..)
    Das gibt genau folgendes:
    17 "Tobias Denzlingenÿÿÿÿ"
    15 "Thomas Freiburg"

    Also strlen ermittelt die korrekte Anzahl, ohne die "ÿÿÿÿ"
    Dann werden die Zeichen einzeln geschrieben, und voila... da sind diese "ÿÿÿÿ" auf einmal...

    Wie gesagt, bin über jeden Anhaltspunkt dankbar, da mir das total meine Datei verhunzt!
    Gruss, Tobias



  • Wie wärs wenn du mal den Code postest, der auch den Fehler hervorruft?


Anmelden zum Antworten