![]() |
problem mit nullterminierung (StrLCopy)
hi leute.. hab malwieder n kleines problemchen
ich schreibe mit folgender zeile daten in ein MMF file
Delphi-Quellcode:
problem ist das ich blockweise damit schreibe und an jedem blockende ein #0 zeichen bekomme ( im hexeditor ists 00 )
StrLCopy(PansiChar(Ptr(integer(PFview)+pos)),pansichar(input),len);
hab schon len-1 benutzt.. und auch mal ansireplacestr #0 zu '' aber nix funktioniert.. krieg dieses ding einfach nich weg |
Re: problem mit nullterminierung (StrLCopy)
Moin!
StrLCopy() kopiert PChars und daher ist dort immer ein NullByte dranne, sonst weiss man ja nicht wo der String aufhört. Die Length die du angeben kannst begrenzt ja nur wieviel Zeichen er kopiert, aber das Ziel (Input) ist ja eh immer ein PChar und daher ist auch immer ein 0 Zeichen dranne. Du müsstest das len-1 beim schreiben in die Datei angeben... Oder schreibe einen AnsiString und gebe als Quelle das 1. Zeichen des Strings an (input[1]) und die normale Länge... MfG Muetze1 |
Re: problem mit nullterminierung (StrLCopy)
Zitat:
|
Re: problem mit nullterminierung (StrLCopy)
Zitat:
ich probier mal die beiden lösungswege :) |
Re: problem mit nullterminierung (StrLCopy)
Muetzes Lösungswege werden nur nicht vom Erfolg gekrönt sein, weil es nicht mit dem String, AnsiString oder sonstwas zu tun hat, sondern einfach damit, daß StrLCopy() dafür geschaffen wurde, C-kompatible Strings zu erzeugen, und die haben nunmal allesamt einen Nullterminator, ergo ist StrLCopy für diesen Einsatzzweck unbrauchbar. Move() kopiert blind eine Reihe von Zeichen von einer Quelle zum Ziel und hängt nicht irgendwelche Terminatoren dran.
|
Re: problem mit nullterminierung (StrLCopy)
jo das hab ich auch rausgefunden.. dachte halt das ich irgendwie trotzdem die 0 abschneiden könnte mit len-1 ;) naja
habs mit move probiert und komme nun nicht mit dem ergebnis klar: Move(input, pointer(integer(PFview)+pos)^, len); ich krieg da in meiner txt datei dann keine ascii zeichen ( lesbares ) zur sicht input str: |040716184240'0|040716184241'24|040716184241' sondern sowas: }E?À? ..... mit haufen #0 dazwischen wie kann ich dieses binäre zeug nun umwandeln ? pchar(pointer(integer(PFview)+pos)) hat auch nich gefunzt |
Re: problem mit nullterminierung (StrLCopy)
Hallo,
vielleicht vertauschst du Ziel und Quellzeiger? Hab grad selber kein OH zur Hand :-( |
Re: problem mit nullterminierung (StrLCopy)
ne das passt :)
hab es gerade zufällig rausgefunden *freu* Move(pointer(input)^, pointer(integer(PFview)+pos)^, len); das tut :) nun steht klartext ( input: string) in der datei |
Re: problem mit nullterminierung (StrLCopy)
Zitat:
Ich hatte da eigentlich mehr von dir erwartet ;-) Pascal-Strings sind so eine Sache, denn sie sind nur Pointer, enthalten zusätzlich einige Byte (4, um genau zu sein) für die Länge des Strings und einen Referenzzähler (nochmal 4 Bytes). Wenn du direkt an die Zeichen ran willst, kannst du beispielsweise input[1] verwenden (das erste Zeichen). Demnach müsste der Aufruf so aussehen:
Delphi-Quellcode:
(wenn len die Länge des Strings exklusive dem Nullterminator ist (wie von StrLen() zurückgegeben).
Move(input[1], Pointer(Integer(PFview) + pos)^, len);
|
Re: problem mit nullterminierung (StrLCopy)
das strings pointer sind weis ich :) blos halt die tiefere thematik fehlt mir da n bisschen.. aber so tuts ja :>
and input[1] hab ich auch schon gedacht.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz