Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Trotz Ansistring-Deklaration Fehler beim Kompilieren
Juniorsatan - Sa 13.03.10 18:08
Titel: Trotz Ansistring-Deklaration Fehler beim Kompilieren
Ich scheitere gerade an einem wirklich simplen Problem. Ich habe eine Zeichenkette > 255 Zeichen, möchte also Ansistring verwenden.
Irgendwas muss ich da prinzipiell falsch machen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button4Click(Sender: TObject); var zk: ansistring; begin zk:='3784372787845234238482394289fujkv gvjk645u68945689gv4c54v6456vg463784372787845234238482394289fujkv gvjk645u68945689gv4c54v6456vg463784372787845234238482394289fujkv gvjk645u68945689gv4c54v6456vg463784372787845234238482394289fujkv gvjk645u68945689gv4c54v6456vg463784372787845234238482394289fujkv gvjk645u68945689gv4c54v6456vg463784372787845234238482394289fujkv gvjk645u68945689gv4c54v6456vg46'; end; |
führt zu "[Error] Unit1.pas(102): String literals may have at most 255 elements".
Auch wenn ich vorher ein
Delphi-Quelltext
1:
| SetLength(zk, 30000000); |
einfüge, hilft das nichts. In diversen Tutorials wird jedoch auch nichts anderes gemacht, sondern genau so, wie ich es probiere. Ich arbeite mit Delphi 7.2.
Xentar - Sa 13.03.10 18:38
Ist nen "Fehler" im Editor.
Teil das auf mehrere Zeilen auf:
Delphi-Quelltext
1: 2: 3:
| sk := 'text' + 'noch mehr text' + 'ganz viel text'; |
Juniorsatan - Sa 13.03.10 19:03
Um es mal etwas anders zu beschreiben:
Delphi kann zwar längere Strings speichern, aber nur 255 Zeichen maximal pro Befehl, richtig?
Martok - So 14.03.10 05:08
Nichtmal "pro Befehl", sondern, wie die Fehlermeldung auch sagt, "pro Literal".
Also pro
'Text' in Anführungszeichen.
Deswegen kann man das auch so umgehen wie
Xentar da sagte.
Weiß eigentlich jemand, warum das so ist? Ich mein, dass der TurboPascal-Compiler noch nicht, ist ja klar. Der ist ja self-sustaining, damals mit ShortStrings. Aber spätestens seit Delphi 3 sollte sich das doch erledigt haben... Irgendwie ist das schon seltsam. Genau, wie die Abwesenheit von HEREDOC, das gehört da ja mit in die Kategorie.
jaenicke - So 14.03.10 08:45
Ganz einfach, diese bis zu 255 Zeichen werden in der Exe vermutlich (habe ich jetzt nicht überprüft) als ShortString gespeichert, was ja auch Sinn macht, da es schnell, platzsparend und einfach ist. Hängt man dann mehrere aneinander sind das eben mehrere ShortStrings.
Ab Delphi 2009 ist dieses Limit nicht mehr vorhanden. Vermutlich ganz einfach weil Unicode möglich ist und das nicht in ShortStrings gespeichert werden kann. Jedenfalls kann man dort problemlos auch längere Strings in den Editor schreiben.
Naja, ok, bis auf Ausnahmen, es gibt da noch kleine Bugs, zumindest in D2009. :mrgreen:
BenBE - Fr 19.03.10 21:54
String-Literale werden als LongStrings mit RefCount=-1 in der EXE gespeichert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!