чёнибудь покрупнее STRING'а
Модератор: Модераторы
чёнибудь покрупнее STRING'а
Люди есть в паскале ченибудь покрупнее STRING'а, т.е. чтоб болше чем 255 символов влезало????
Есть! AnsiString или тот же String
AnsiString - это динамические строки, туда можна пихать до 2Гб.
При {$H+} String стает тем же самым что и AnsiString. {$H+} устанавливается автоматом при {$mode objfpc} и {$mode delphi}.
Для этого их нужно объявлять:
Можна еще использовать PChar, правда там надо будет еще следить за выделением и освобождением памяти и пользоватся ими не совсем удобно (ИМХО).
AnsiString - это динамические строки, туда можна пихать до 2Гб.
При {$H+} String стает тем же самым что и AnsiString. {$H+} устанавливается автоматом при {$mode objfpc} и {$mode delphi}.
Для этого их нужно объявлять:
Код: Выделить всё
{$mode objfpc}
var
s: String;Можна еще использовать PChar, правда там надо будет еще следить за выделением и освобождением памяти и пользоватся ими не совсем удобно (ИМХО).
Код: Выделить всё
{$mode delphi}
Uses
Dos;
Var
query: string;
PROCEDURE Init;
Begin
writeln('content-type: text/html');
writeln;
End;
Begin
query:= getenv('QUERY_STRING');
Init;
writeln('<html>');
writeln(query);
writeln('</html>');
End.
теперь передаю значение
index.exe?fsdfs=dfgdfgdfgdfg dfg df gdfgdfgsdf dfgdfgdfg dfgdfgdfgdfgdfgd gfdfgdfgdg dgfgdfgdfgdf gdfgdfg dfgdfgdf gfd fgfdgdfg dgfdfg sdfgdf gdfgdfgd fgddfg dfgdf gdfgdfgdf g dgdf gg g dfg gf df gdfg dfgdfgd fgdfg g d fgdf gdf g gf gd fgd gdfgertergfrd gdfg d fgeergfdfgdf g gdfdfg sd sdffg sd gsd gsdf gsd gf s gdfsdgf gdf gsd s df gdfgdefg dfdf gdf gdf g df f sg gfdfgderergergdfgerftghgrdfggtr dr r erg dr gf dfg er 1111
но выдает вот такое (то есть обрезает строку)
fsdfs=dfgdfgdfgdfg%20dfg%20df%20gdfgdfgsdf%20dfgdfgdfg%20dfgdfgdfgdfgdfgd%20gfdfgdfgdg%20dgfgdfgdfgdf%20gdfgdfg%20dfgdfgdf%20gfd%20fgfdgdfg%20dgfdfg%20sdfgdf%20gdfgdfgd%20fgddfg%20dfgdf%20gdfgdfgdf%20g%20dgdf%20gg%20g%20
ЛЮди почему строка обрезается если она как вы говорите 2G??????????
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
bw
SysUtils в основном работает с AnsiString. Или вы склонны считать что он не относиться к RTL
То что в модуле System {$H-} это еще не значит что он не использует AnsiString.
Видимо в данном случае, для совместимости в модуле Dos используется ShortString, потому что старый код может на это полагаться.
SysUtils в основном работает с AnsiString. Или вы склонны считать что он не относиться к RTL
То что в модуле System {$H-} это еще не значит что он не использует AnsiString.
Видимо в данном случае, для совместимости в модуле Dos используется ShortString, потому что старый код может на это полагаться.
- bw
- постоялец
- Сообщения: 359
- Зарегистрирован: 01.12.2005 10:36:23
- Откуда: Усть-Илимск
- Контактная информация:
Я не вы, я ты
.
SysUtils я не рассматривал. Собственно я говорил только о System. Кажется crt тоже компилируется с ShortString. Все же это низкоуровневые, базовые модули и они задают правила игры. SysUtils и mode objfpc все же высокоуровневые модули. И их можно либо не использовать либо заменить своими.
Собственно я не спорю и не говорю что использование ShortString в System катастрофа, просто это нужно иметь ввиду, если функция из RTL использует String, то это вероятнее всего ShortString.
p.s. Assign и ChDir, к примеру, использут строки (и следовательно допустимо не больше 255 символов).
..bw
SysUtils я не рассматривал. Собственно я говорил только о System. Кажется crt тоже компилируется с ShortString. Все же это низкоуровневые, базовые модули и они задают правила игры. SysUtils и mode objfpc все же высокоуровневые модули. И их можно либо не использовать либо заменить своими.
Собственно я не спорю и не говорю что использование ShortString в System катастрофа, просто это нужно иметь ввиду, если функция из RTL использует String, то это вероятнее всего ShortString.
p.s. Assign и ChDir, к примеру, использут строки (и следовательно допустимо не больше 255 символов).
..bw
- Attid
- долгожитель
- Сообщения: 2588
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
ну раз здесь стринг обсуждается сюда добавлю:
код:
fMain.pas(1212,10) Error: Incompatible types: got "Text" expected "AnsiString"
что-то не пойму как мне тут приведение типов сделать ?
as string не пашет =/
код:
Код: Выделить всё
var str:string;
begin
str := stdErr;
//***--***//
end;
fMain.pas(1212,10) Error: Incompatible types: got "Text" expected "AnsiString"
что-то не пойму как мне тут приведение типов сделать ?
as string не пашет =/
- bw
- постоялец
- Сообщения: 359
- Зарегистрирован: 01.12.2005 10:36:23
- Откуда: Усть-Илимск
- Контактная информация:
Не понял, нужен ли тебе этот StdErr, но на всякий случай:
Дальше стоит дело за реализацией указанных WriteMy и CloseMy. Сейчас понемногу портирую RTL на KolibriOS, так что немного навострился
в таких делах.
..bw
Код: Выделить всё
procedure AssignMy(var f: Text);
begin
Assign(f, '');
TextRec(f).OpenFunc := @OpenMy;
Rewrite(f);
end;
procedure OpenMy(var f: TextRec);
begin
TextRec(f).InOutFunc := @WriteMy;
TextRec(f).FlushFunc := @WriteMy;
TextRec(f).CloseFunc := @CloseMy;
end;
...
begin
Close(StdErr);
AssignMy(StdErr);
...
Дальше стоит дело за реализацией указанных WriteMy и CloseMy. Сейчас понемногу портирую RTL на KolibriOS, так что немного навострился
..bw
