AGB  ·  Datenschutz  ·  Impressum  







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

PChar ???

Ein Thema von edeWelzheim · begonnen am 18. Okt 2007 · letzter Beitrag vom 18. Okt 2007
 
edeWelzheim

Registriert seit: 14. Mär 2005
Ort: Welzheim
8 Beiträge
 
Delphi 2005 Professional
 
#1

PChar ???

  Alt 18. Okt 2007, 08:16
die Aufgabe:
in einer ISR sollen seriell eintreffende Daten zeichenweise verarbeitet werden.
der Empfangspuffer ist definiert als zB ch:array[0..1] of char.
natürlich möchte ich die Zeichen zusammenfügen, am einfachsten natürlich so:
s:= s + ch[0]
aus unerfindlichen (noch unbekannten) Gründen stürzt der PC *bei dieser* Anweisung ab, weshalb
ich auf die Idee kam, die Zeichen eben als PChar zu verwalten, was aber wieder andere
Schwierigkeiten aufwirft:
in den knappen Beschreibungen, die ich habe, sieht alles ganz klar + einfach aus, wenngleich es
auch Widersprüche gibt (zB 'PChar nur Zeiger, vor der Arbeit muss Speicher res werden' - eine andere Quelle weist einfach Inhalt zu; oder: 'StrPCopy nur im Zus'hang mit ShortStrings zu verwenden' - andere Quelle nutzt diese Routine mit normalen Strings + array of char).

Habe nun ein Mini-Test-Pogramm gemacht, das aber die unmöglichsten Ergebnisse bringt (eigentlich
immer etwas anderes als erwartet); besonders übel (ges-Zus'hang s.u.):
1)
//s:=Edit1.Text; pCh:=strPCopy(x,s); {->nicht ok; Müll hinten dran..?}
2)
{pCh:=strCat(pCh,pCh);} {ergibt 'ungültige Zeigeroperation' ?}
3)
//das folgende tut auch nicht.. ?}
s:=inttoStr(StrLen(pCh));{StrPas(pCh);} Label1.Caption:=s;


Kann da vielleicht jemand für Klarheit sorgen?? Danke!


PS:
a) wird strAlloc überhaupt benötigt?
b) wie gesagt: eigentlich möchte ich nur Char/PChar aneinanderreihen (analog s:=s+'x');



[code]
unit Test_PChar;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
ChArray:array[0..100] of char;
pChChar;
ChArray2:array[0..100] of char;
pCh2Char;
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,j,k:integer; x:array[0..10] of char;
pXChar;
begin
pX:=x; {nur ok, wenn x-Array ab '0'!!}
//sonst Compiler-Err 2010 (inkompatible Typen Array and PAnsiChar)
{pCh:=@ChArray;}
pCh:='123';
{pCh2:=@ChArray2;}
pCh2:='456';
Label1.Caption:=StrPas(pCh);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var pHlpChar;
x:array[0..100] of char;
s:string;
begin
{pHlp:=strAlloc(100);}
//s:=Edit1.Text; pCh:=PChar(s); {->ist ok}
//s:=Edit1.Text; pCh:=strPCopy(x,s); {->nicht ok; Müll hinten dran..?}
pCh :=strPCopy(ChArray,Edit1.Text);
pHlp:=strPCopy(ChArray2,Edit2.Text);
pCh:=strCat(pCh,pCh2);
s:=Edit2.Text; pCh2:=PChar(s); {->ist ok}
{pCh:=strCat(pCh,pCh);} {ergibt 'ungültige Zeigeroperation' ?}
//das folgende tut auch nicht.. ?}
s:=inttoStr(StrLen(pCh));{StrPas(pCh);} Label1.Caption:=s;
{StrDispose(pHlp);}
end;

end.
  Mit Zitat antworten Zitat
 


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 08:09 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