AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

string in array of char umwandeln

Ein Thema von Aenogym · begonnen am 4. Jul 2004 · letzter Beitrag vom 5. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#1

string in array of char umwandeln

  Alt 4. Jul 2004, 13:04
hi,

ich habe ein problem. ich möchte einen string in einen array of char umwandeln. das war meine idee:

Delphi-Quellcode:
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;
der compiler meckert nicht. aber während der laufzeit crasht mein programm bei der zeile "new_msg[i] := msg[i+1];".

habt ihr eine funktionierende möglichkeit, einen string in einen array of char und auch wieder zurück umzuwandeln?

danke,
Aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 13:06
Probiers mal so:
Delphi-Quellcode:
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;
Vielleicht funktioniert das jetzt...

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 13:18
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
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#4

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 13:34
Probier mal
Delphi-Quellcode:
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;
Ratte
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 13:37
@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:
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;
Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#6

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 13:40
ging das nicht ungefähr so:

array_of_char:=PChar(string);
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 14:23
Moin Zusammen,

es ginge auch noch so:

Delphi-Quellcode:
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;
@alcaeus
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Ratte

Registriert seit: 12. Dez 2003
Ort: Erfurt
345 Beiträge
 
Delphi 2005 Personal
 
#8

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 14:42
@alcaeus: Also bei mir funzt's fehlerlos...

Ratte
Schiffsratte der U.S.S. Delphipraxis, Laderaum 4538
BUSH:= TTerminator.create;
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 19:49
WOW, danke, dass sich soviele leute diesem thema annehmen
ich werd's denn mal versuchen.

Aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: string in array of char umwandeln

  Alt 4. Jul 2004, 23:01
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:
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;
falls es weiterhilft, hier mal die meldung:
Code:
---------------------------
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  
---------------------------
ich kann auch noch mehr code zeigen, nur will diesen post jetzt nicht so füllen
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
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz