Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Komisches String Verhalten? (https://www.delphipraxis.net/178818-komisches-string-verhalten.html)

AlexII 29. Jan 2014 12:04

Komisches String Verhalten?
 
Hallo,

ich habe folgendes Problem. Ich verstehe nicht wieso in der Rückgabe bzw. dem Result nicht immer 8 Zeichen bzw. Buchstaben stehen? Sehr oft 8, aber ab und zu gar keine oder nur 3 oder 4... hm... kapiere ich nicht. Ich habe eine Vermutung, dass das irgendwie dann aufkommt, wenn ein Buchstabe mehrmals nacheinander vorkommt, oder irre ich mich da?

Bin für jede Aufklärung dankbar.

Delphi-Quellcode:
function GetPassword(vUpCaseLet: Integer): String;
var
  i : Integer;
  s1 : String;
const
  u : String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
begin
  // Großbuchstaben
  if vUpCaseLet = 1 then
  begin
    s1 := '';
    for i := 1 to 8 do
    begin
      s1 := s1 + u[Random(Length(u) + 1)];
    end;
  end;

  Result := s1;
end;

himitsu 29. Jan 2014 12:19

AW: Komisches String Verhalten?
 
Weil das +1 falsch geklammert ist?

Schalte mal in den Projektoptionen die Bereichsprüfung ein.


Und nein, da sind immer 8 Zeichen drin (wenn vUpCaseLet=1), was dir der Debugger bestätigen wird, falls du den mal nutzen solltest.
Aber nicht alle Zeichen werden von allem angezeigt (alles mit PChar dazwischen schneidet z.B. ab einer #0 den String ab)


PS: das vUpCaseLet sieht mir aber arg nach einem "Boolean" aus.

Sir Rufo 29. Jan 2014 12:35

AW: Komisches String Verhalten?
 
Eine Warnung müsste der Compiler hier auch ausgeben:
Delphi-Quellcode:
sl

AlexII 29. Jan 2014 12:41

AW: Komisches String Verhalten?
 
Zitat:

Zitat von himitsu (Beitrag 1245848)
Weil das +1 falsch geklammert ist?

Boah... tatsächlich, ich war Betriebsblind.

Zitat:

Zitat von himitsu (Beitrag 1245848)
Schalte mal in den Projektoptionen die Bereichsprüfung ein.

Ich schreibe in diesem Fall mit Lazarus. )))

Zitat:

Zitat von himitsu (Beitrag 1245848)
Und nein, da sind immer 8 Zeichen drin (wenn vUpCaseLet=1), was dir der Debugger bestätigen wird, falls du den mal nutzen solltest.
Aber nicht alle Zeichen werden von allem angezeigt (alles mit PChar dazwischen schneidet z.B. ab einer #0 den String ab)

Habe ich schon vermutet. Danke!

Zitat:

Zitat von himitsu (Beitrag 1245848)
PS: das vUpCaseLet sieht mir aber arg nach einem "Boolean" aus.

Stimmt, muss ich ändern!

himitsu 29. Jan 2014 13:51

AW: Komisches String Verhalten?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1245850)
Eine Warnung müsste der Compiler hier auch ausgeben:
Delphi-Quellcode:
sl

Kann sein, daß er es nicht macht, da Strings immer initilisiert sind. (sonst würde die Referenzzählung nicht funktionieren)

Zitat:

Zitat von AlexII (Beitrag 1245851)
Ich schreibe in diesem Fall mit Lazarus. )))

Selbst Lazarus müsste Compileroptionen für die Bereichsprüfung (
Delphi-Quellcode:
{$R}
/
Delphi-Quellcode:
{$RANGECHECKS}
) und die Überlaufprüfung (
Delphi-Quellcode:
{$Q}
/
Delphi-Quellcode:
{$OVERFLOWCHECKS}
) kennen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 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