![]() |
string in array of char umwandeln
hi,
ich habe ein problem. ich möchte einen string in einen array of char umwandeln. das war meine idee:
Delphi-Quellcode:
der compiler meckert nicht. aber während der laufzeit crasht mein programm bei der zeile "new_msg[i] := msg[i+1];".
var msg: string;
new_msg: array of char; i: integer; begin setlength(new_msg, length(msg)); for i := 0 to high(new_msg) do begin new_msg[i] := msg[i+1]; end; end; habt ihr eine funktionierende möglichkeit, einen string in einen array of char und auch wieder zurück umzuwandeln? danke, Aenogym |
Re: string in array of char umwandeln
Probiers mal so:
Delphi-Quellcode:
Vielleicht funktioniert das jetzt...
var msg: string;
new_msg: array of char; i: integer; begin setlength(new_msg, length(msg)); for i := 1 to Length(msg) do begin new_msg[i-1] := msg[i]; end; end; Greetz alcaeus |
Re: string in array of char umwandeln
tja und wie geht das andersrum?
ich kanns nur testen, wenn ich das ganze auch wieder zurück in einen string konvertieren kann. ich will nämlich den array of char durchs internet schicken und der client soll ihn dann empfangen. also beim server hab ich das jetzt so angepasst. hab auch versucht, das ganze "umzudrehen" und dann beim client einzufügen aber da gibts dann wieder ne exception. Aenogym |
Re: string in array of char umwandeln
Probier mal
Delphi-Quellcode:
Ratte
var msg: string;
new_msg: array of char; i: integer; begin setlength(new_msg, length(msg)-1); for i := 1 to length(msg) do begin new_msg[i-1] := msg[i]; end; end; |
Re: string in array of char umwandeln
@Ratte: Willkommen zur Zugriffsverletzung bei der letzten Schreiboperation. Length gibt dir nämlich Ord(msg[0]) zurück, und das ist zufällig die Anzahl Zeichen im String. Das -1 im SetLength musst du also weglassen.
Das Zurückumwandeln funktioniert jetzt ganz einfach:
Delphi-Quellcode:
Greetz
var msg: string;
new_msg: array of char; i: integer; begin setlength(msg, length(new_msg)); for i := 1 to Length(new_msg) do begin msg[i] := new_msg[i-1]; end; end; alcaeus |
Re: string in array of char umwandeln
ging das nicht ungefähr so:
array_of_char:=PChar(string); |
Re: string in array of char umwandeln
Moin Zusammen,
es ginge auch noch so:
Delphi-Quellcode:
@alcaeus
var
msg : string; new_msg : array of char; begin msg := 'Meldung'; setlength(new_msg,length(msg)); StrLCopy(@new_msg[0],@msg[1],length(new_msg)); end; ord(msg[0]) wäre es bei einem ShortString (wobei hier length(msg) genausogut ginge). Der Typ string ist eigentlich ein Pointer auf den Inhalt des Strings. Auf der Adresse -4 beginnt der Zähler, auf Adresse -8 ein Referenzzähler.
Delphi-Quellcode:
var
msg : string; pLength : PDWORD; begin msg := 'Meldung'; pLength := PDWORD(msg); dec(pLength); ShowMessage(IntToStr(pLength^)); end; |
Re: string in array of char umwandeln
@alcaeus: Also bei mir funzt's fehlerlos...
Ratte |
Re: string in array of char umwandeln
WOW, danke, dass sich soviele leute diesem thema annehmen ;)
ich werd's denn mal versuchen. Aenogym |
Re: string in array of char umwandeln
hi nochmal,
also ich habs jetzt getestet und es klappt irgendwie nicht. das umwandeln von string in array klappt (array inspected - einzelne chars sind drin). dann wird mein record (in dem dieses array drinsteckt) über den serversocket versendet und kommt auch beim client an. jetzt will ich es weiterverarbeiten, hänge aber wieder an einer exception:
Delphi-Quellcode:
falls es weiterhilft, hier mal die meldung:
var name: string;
msg.username: array of char; setlength(name, length(msg.username)); //<== hier exception for i := 1 to Length(msg.username) do begin name[i] := msg.username[i-1]; end;
Code:
ich kann auch noch mehr code zeigen, nur will diesen post jetzt nicht so füllen ;)
---------------------------
Debugger Exception Notification --------------------------- Project iceChat.exe raised exception class EAccessViolation with message 'Access violation at address 004059BC in module 'iceChat.exe'. Read of address 008D2688'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- aber ist der code fürs zurückwandeln vielleicht doch fehlerhaft oder mache ich was falsch? edit: ich versuche einfach mal die möglichkeit von christian seehase. thx, Aenogym |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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