AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Vorsicht! statisches Array mit Startindex>0
Thema durchsuchen
Ansicht
Themen-Optionen

Vorsicht! statisches Array mit Startindex>0

Ein Thema von Photoner · begonnen am 27. Feb 2015 · letzter Beitrag vom 1. Mär 2015
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 27. Feb 2015, 18:25
Delphi-Quellcode:
type
   TA : Array of Ansichar;
   TB : Array [0..200] of Ansichar;
var
  A : TA;
  B : TB;
  S : Shortstring;
begin
  S := 'Cooler Text';
  Setlength(A,201);

  Move(S[1],A,length(S));
  Move(S[1],B,length(S));
end;
Mit Deinem coolen Text mag das ja noch funktionieren, aber wenn er richtig lange cool wird ist ein
TB : Array [0..254] of Ansichar; wohl eher angebracht. Wobei ich ein [1..255] bevorzuge, weil dann der Index synchron laufen kann.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 27. Feb 2015, 18:36
Ich habe noch nicht einmal eine ungefähre Ahnung was euer Code machen soll, aber ich bin mir sicher etwas Assembler würde ihm noch den letzten Schliff verleihen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#13

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 27. Feb 2015, 18:46
Wobei ich ein [1..255] bevorzuge, weil dann der Index synchron laufen kann.
ShortString

Und rate mal, was passiert, wenn du mal auf einen NextGen-Compiler triffst.
> String-Indize beginnen dort bei 0

Bzw. die neuen String-Helper indizieren immer mit 0 beginnend.


Viele Dinge wurden um 2006 durch die FastCodeLibrary ersetzet.
Wenn da auch Move dabei war (so wie z.B. die Move's im FastMM), dann ist das schon optimiert und kopiert auch schonmal mit 4 bis 16 Bytes pro Loop.

Assembler ist nicht immer besser, vorallem wenn man sich selber nicht mit den Cache- und Pfadvorhersagemechianismen der "aktuellen" Prozeduren auskennt.
$2B or not $2B

Geändert von himitsu (27. Feb 2015 um 18:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 28. Feb 2015, 11:34

Und rate mal, was passiert, wenn du mal auf einen NextGen-Compiler triffst.
> String-Indize beginnen dort bei 0
Na dann stellt man sich eben um, ein bischen Flexibilität hat noch keinem geschadet.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 28. Feb 2015, 12:27

Und rate mal, was passiert, wenn du mal auf einen NextGen-Compiler triffst.
> String-Indize beginnen dort bei 0
Na dann stellt man sich eben um, ein bischen Flexibilität hat noch keinem geschadet.
Da nimmt man halt die String-Helper Methoden und man hat wieder einen Quellcode für beide Welten.
Statt Flexibilität muss man halt den Quellcode (nachdem er von Pascal 1 (?) bis XE8 (WinX/OSX) ohne änderung funktionieren würde) umstellen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#16

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 28. Feb 2015, 15:31
Eigentlich müsste es bei Dynamischen Array immer mit ^ geschrieben werden, da es sich nicht mehr um Speicherbereich handelt,
sondern plötzlich um einen "Zeiger"...
Dann müsstest du auch strings immer mit ^ schreiben, denn die sind nichts anderes als dynamische Arrays of Char.

Also ich bin froh, dass man ^ mittlerweile in vielen Fällen (z.B. Zugriff auf Felder eines Record-Pointers) weglassen kann.


Na wer findet die Exception?
Also wenn schon, dann richtig:
Delphi-Quellcode:
uses
  System.Math;

type
  TA = Array of AnsiChar;
  TB = Array [0 .. 200] of AnsiChar;

var
  A: TA;
  B: TB;
  S: ShortString;

begin
  S := 'Cooler Text';
  SetLength(A, 201);

  Move(S[Low(S)], A[Low(A)], Min(Length(S) * SizeOf(S[Low(S)]), Length(A) * SizeOf(A[Low(A)])));
  Move(S[Low(S)], B[Low(B)], Min(Length(S) * SizeOf(S[Low(S)]), Length(B) * SizeOf(B[Low(B)])));
end;
So funktioniert es mit statischen und dynamischen Arrays, unabhängig vom Startindex. Nur nicht mit ShortString, weil Low() hier eben 0 liefert und damit nach dem Move #11'CoolerTex' in A und B steht. Besoders schön / leserlich ist solcher Code natürlich auch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: Vorsicht! statisches Array mit Startindex>0

  Alt 1. Mär 2015, 02:03
Dann müsstest du auch strings immer mit ^ schreiben, denn die sind nichts anderes als dynamische Arrays of Char.
Nur wenn es keine Shortstrings sind... Da sich bei einem ShortString wieder Speicher dahinter "versteckt"

Also wenn schon, dann richtig:
Es ging nicht darum es richtig zu machen, sondern eine "möglichen" Fehlerquelle auf zu zeigen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:36 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