Autor Beitrag
Christian Patrick
Hält's aus hier
Beiträge: 1

Win 2000

BeitragVerfasst: So 21.03.04 14:51 
Hallo,

ich habe folgenden Datentyp deklariert:

ausblenden Delphi-Quelltext
1:
2:
type
TTest = Array[0..3of char;


Eine Variable diese Typs möchte ich nun mit genau 4 Zeichen füllen. StrLCopy sollte das eigentlich für mich erledigen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function Hilfe:TTest;
var
  size:integer;
begin
  size := SizeOf(TTest);
  StrLCopy(result,PChar('1234') , size);
end;


Warum verursache ich hiermit eine Schutzverletzung?

Vergrößere ich das Array oder übergebe ich nur 3 statt vier Zeichen funktioniert es, aber es müssten doch 4 Zeichen in eine Variable vom Typ TTest passen, oder?

Moderiert von user profile iconPeter Lustig: Delphi-Tags hinzugefügt
Moderiert von user profile iconTino: Topic verschoben.
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: So 21.03.04 14:55 
Delphi-Hilfe hat folgendes geschrieben:
Description
StrLCopy copies at most MaxLen characters (plus a null terminator) from Source to Dest and returns Dest. The SizeOf standard function can be used to determine the MaxLen parameter.

Note: StrLCopy copies a null terminator as well as MaxLen characters. Be sure that Dest is large enough to accomodate the null terminator at the end.

Muss ich noch was dazu sagen..? :roll: ;)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 21.03.04 14:57 
Hallo und :welcome:!

Auszug aus der Delphi-Hilfe:
Delphi-Hilfe hat folgendes geschrieben:
Beschreibung

StrLCopy kopiert höchstens MaxLen Zeichen von Source nach Dest und gibt einen Null-Terminator auf Dest zurück. Die Größe des Parameters MaxLen kann mit der Standardfunktion SizeOf (Delphi) bzw. dem Operator sizeof (C++) bestimmt werden. Normalerweise entspricht MaxLen dem Wert von SizeOf(Dest)-1.

Hinweis: StrLCopy kopiert einen Nullterminator sowie MaxLen-Zeichen. Stellen Sie sicher, dass Dest groß genug für den Nullterminator am Ende ist.


Das heißt, Du hast zwar genug Platz für die Zeichen, aber der Nullterminator passt bei Dir nicht mehr mit rein!

MfG
Peter

//edit: Mist, zu spät ... :lol:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".