Anhängen von Binärer 0 an String



  • Wie kann ich an ein String eine binäre "0" anhängen? Ich habe ein Beispielquelltext allerdings in Basic, dort wird an ein String ein CHR(0) angefügt. Nun soll ich dieses in C übertragen.
    Ich habe es schon mit: string+'\0' probiert allerdings ohne Erfolg. Was mach ich falsch??

    😞



  • Strings bzw. char-Arrays werden in C/C++ üblicherweise automatisch terminiert, d.h. die binäre Null muss nicht explizit angehängt werden.

    Wie bzw. woher bekommst du den String denn?



  • Also meiner Erfahrung aus C muss in manchen Fällen einfach nur eine '0' angehangen werden. (klingt komisch, ist aber so ^^)



  • also bei chars ist das durchaus korrekt. \0 terminiert den 'String' (der keiner ist, sondern eine Zeichenkette).
    Es reicht aber, nach dem Erzeugen eines 'Strings', das erste zeichen auf 0 zu setzen. Solange man den 'String' dann mit den Standardfunktionen bearbeitet, bleibt das Ende des chars (\0) immer richtig gesetzt. Nur wenn man selbst direkt den Speicherbereich manipuliert, muss man dafür sorgen, dass der 'String' korrekt terminiert wird.

    Bei den echten Strings (class String oder class AnsiString) ist ein manuelles Terminieren des Strings nicht nötig bis kontraproduktiv. Bei diesen Stringklassen sollte man definitiv keine manuelle Manipulation vornehmen (also über Zeiger die Daten direkt verändern). Ausgenommen natürlich, man weiß was man macht und verändert alle abhängigen Variablen gleich mit. Aber das ist was für Fortgeschrittene...

    Und ja, unter C sind \0; 0 und NULL identisch.



  • Ich habe mir mal zwei erzeugte Dateien mit einem Hexeditor angeschaut,
    bei der Datei, welche mit Basic erzeugt wurde steht an der entsprechenden Stelle eine "00" in meinem Programm eine "42" obwohl ich ein '\0' angehängt habe. Wo mach ich den Fehler??? 😞



  • Nochmal:
    MAN KANN AN STRINGS KEINE BINÄRE 0 ANHÄNGEN!!!!!!

    Dazu mußt Du dann schon char verwenden.

    AnsiString asTest= "hallo";;
       char* pcTest;
       pcTest = asTest.c_str();
    

    Wenn Du dir denn Inhalt von pcTest ansiehst, wirst Du feststellen, dass das letzte Zeichen \0 ist.

    Allerdings kannst Du dann auch kein TMemo, TRichEdit oder TStringList zum Speichern der Datei verwenden, da dabei automatisch wieder zu AnsiString konvertiert wird. Du mußt Dir dann auch die Mühe machen, die Datei 'von Hand' zu erzeugen und zu speichern.



  • Wie schon gesagt: es wäre mal interessant, zu wissen, wie du deine Zeichenkette erzeugst/erhältst/weiterverarbeiten willst.
    Sonst reden wir hier noch wochenlang aneinander vorbei. 😉

    Nachtrag:
    Ich sehe jetzt erst, dass du einen entsprechenden zweiten Thread aufgemacht hast. In Zukunft bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!


Anmelden zum Antworten