AGB  ·  Datenschutz  ·  Impressum  







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

String länger als 4 KB

Ein Thema von darkstone · begonnen am 22. Nov 2003 · letzter Beitrag vom 23. Nov 2003
Antwort Antwort
Seite 1 von 2  1 2      
darkstone

Registriert seit: 4. Feb 2003
26 Beiträge
 
#1

String länger als 4 KB

  Alt 22. Nov 2003, 16:55
Hi all,

ich hab da ein ziemlich fieses Problem: wenn ich in einen String mehr als 4 KB schreib, kommt nur Schrott raus - genauer gesagt die ersten 4096 Zeichen sind okay, der Rest sieht aus wie #0#0#0#0...

hat das schon mal wer gehabt ?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: String länger als 4 KB

  Alt 22. Nov 2003, 17:00
Was verstehst du unter "in einen String schreiben"?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#3

Re: String länger als 4 KB

  Alt 22. Nov 2003, 17:00
Hallo darkstone,

theoretisch solltest Du mehr als 2GB an Daten in einem String fassen können und erfolreich konnte ich mit Strings, deren Länge die 10MB überstieg abeiten.

Arbeitest Du direkt mit einem String oder weist Du einer Komponenteneigenschaft Werte zu?
Wir erstellst/füllst Du den String?
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#4

Re: String länger als 4 KB

  Alt 22. Nov 2003, 17:18
Hallo darkstone,
Zitat von darkstone:
Hi all,

ich hab da ein ziemlich fieses Problem: wenn ich in einen String mehr als 4 KB schreib, kommt nur Schrott raus - genauer gesagt die ersten 4096 Zeichen sind okay, der Rest sieht aus wie #0#0#0#0...

hat das schon mal wer gehabt ?
wenn dann nur #0#0#0#0... kommt ist mit dem ersten #0 der String auch schon zu Ende. Bist Du sicher das Dein String länger ist?

bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#5

Re: String länger als 4 KB

  Alt 22. Nov 2003, 17:24
Zitat von Duffy:
Hallo darkstone,
Zitat von darkstone:
Hi all,

ich hab da ein ziemlich fieses Problem: wenn ich in einen String mehr als 4 KB schreib, kommt nur Schrott raus - genauer gesagt die ersten 4096 Zeichen sind okay, der Rest sieht aus wie #0#0#0#0...

hat das schon mal wer gehabt ?
wenn dann nur #0#0#0#0... kommt ist mit dem ersten #0 der String auch schon zu Ende. Bist Du sicher das Dein String länger ist?

bye
Claus
Das stimmt nicht ganz, das gilt nur für PChars. Ich arbeite manchmal in nonVCL Progrs mit Strings als Datenpuffer und da sind manchmal ne Menge #0 drin, das klappt allerdings auch mit ner Menge KB (mind. 70-80, mehr hatte ich bis jetzt glaube ich nicht, 2GB sind aber wie gesagt möglich).

Probier z.B. mal StringOfChar(#0, 8192), dann erhälts du trotzdem eine Länge von 8192 und kannst auf alle Chars zugreifen/sie verändern. Nur die Ausgabe auf dem Bildschirm geht nur bis zur ersten #0
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#6

Re: String länger als 4 KB

  Alt 22. Nov 2003, 17:47
Hallo scp,
das ist mir schon klar. Da aber Delphi standardmäßig mit Huge String arbeitet und auch deshalb in Byte 0 und darunter sich die Länge des Strings merkt. Der String wird aber trotzdem mit einen 0h abgeschlossen. Eine Ausnahme bildet SetLenght. Hier wird einfach nur das Längenbyte geetzt und der Inhalt nach der alten Länge ist undefinert. In obigen Fall wäre es ein Fehler. Ich denke aber, der String ist nach dem ersten auftauchen von #0 zu ende bzw. undefiniert.

bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
darkstone

Registriert seit: 4. Feb 2003
26 Beiträge
 
#7

Re: String länger als 4 KB

  Alt 22. Nov 2003, 17:50
Danke für die schnellen Antworten - zur Klarheit füg ich hier das Code-Schnipsel ein:

Delphi-Quellcode:
procedure StrTest;
var
  i: Integer;
  aString: String;
begin
  for i:=0 to 500 do begin
    aString := aString + '0123456789';
  end;
end;
Damit wird ein String mit insgesamt 5010 Byte gefüllt - im Debugger seh ich, dass nur die ersten 4096 richtig sind, der Rest ist anscheinend mit #0 aufgefüllt. Allerdings seh ich auch, dass an zufälligen stellen (>4096) auch Methodenbezeichnungen als Teils des Strings stehn (z.B. TForm1.OnActivate).

Ich vermute, dass da irgendwo Teile des RAMs überschrieben werden. Nur kann ich beim besten Willen nicht herausfinden, wo der Bug ist. Ich hab auch schon ein komplett neues Projekt erstellt (weil ich dachte, dass vorher irgendwo was schief läuft) - brachte aber das gleiche Ergebnis.

Vielleicht kann ja von euch wer Licht in mein Dunkel bringen...
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#8

Re: String länger als 4 KB

  Alt 22. Nov 2003, 18:02
Hallo darkstone,
Zitat von darkstone:
Danke für die schnellen Antworten - zur Klarheit füg ich hier das Code-Schnipsel ein:

Delphi-Quellcode:
procedure StrTest;
var
  i: Integer;
  aString: String;
begin
  for i:=0 to 500 do begin
    aString := aString + '0123456789';
  end;
end;
Damit wird ein String mit insgesamt 5010 Byte gefüllt - im Debugger seh ich, dass nur die ersten 4096 richtig sind, der Rest ist anscheinend mit #0 aufgefüllt. Allerdings seh ich auch, dass an zufälligen stellen (>4096) auch Methodenbezeichnungen als Teils des Strings stehn (z.B. TForm1.OnActivate).

Ich vermute, dass da irgendwo Teile des RAMs überschrieben werden. Nur kann ich beim besten Willen nicht herausfinden, wo der Bug ist. Ich hab auch schon ein komplett neues Projekt erstellt (weil ich dachte, dass vorher irgendwo was schief läuft) - brachte aber das gleiche Ergebnis.

Vielleicht kann ja von euch wer Licht in mein Dunkel bringen...
ich sehe da keinen Fehler ...
schau Dir die Demo an

bye
Claus
Angehängte Dateien
Dateityp: rar beispiel_131.rar (173,2 KB, 4x aufgerufen)
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: String länger als 4 KB

  Alt 22. Nov 2003, 18:04
Du hast die lokale Variable aString nicht initialisiert. Versuche aString:= ''; oder Initialize(aString); Erklärung: Zu einem String werden die Stringdaten selbst, ein Längenwert (Nein, nicht im Byte[0], dann wären ja nur 255 Zeichen möglich) und ein Referenzzähler abgespeichert. Der Ort, wo diese Daten zu finden sind, wird als "Pointer" in der Variable aString abgelegt. Wenn Du Code in der Form anotherString:= aString; schreibst, wird tatsächlich nur dieser "Pointer" kopiert und der Referenzzähler des Strings inkrementiert.
In Deinem Fall "zeigte" aString an eine zufällige Stelle, so dass die dort vorhanden Werte interpretiert und verändert worden sind (sehr gefährtlich ).

Edit: Habe mir gerade den ASM-Code angesehen: Strings scheinen immer initialisiert zu werden, auch das Kopieren wird in solchen Fällen korrekt abgefangen...
gruß, choose
  Mit Zitat antworten Zitat
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#10

Re: String länger als 4 KB

  Alt 22. Nov 2003, 18:43
Hi,

kann es sein, daß der String in Ordnung ist, und der Debugger nur die ersten 4096 Zeichen korrekt anzeigt?

Grüsse
Woki
  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 12:03 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