Пытался реализовать строки string C++ на паскале. Что хочется добиться от таких строк.
Строка содержит массив char оканчивающаяся на 0.
Цель:
1. Строка должна уметь очищаться. (С++ реализации в индекс 0 присваивается символ 0)
2. При добавлении строки, строка расширяется на размерность *2 *3 и т.д
Мне это нужно, для написания парсеров. Когда на вход принимаются строки в буфер, после обработки, буфер очищается заполняется новой строкой. Буфер выделяю один раз к примеру 64 кб.
Реализация ниже, не работает. В консоль выводится абракадабра.
- Код: Выделить всё
- {$mode objfpc}{$H+}
 program Main;
 uses
 Classes,
 SysUtils,
 LDL;
 
 type
 FTString = class
 private
 Data : array of Char;
 Total: LongWord;
 Posit: LongWord;
 public
 function StrLen(const Source: PChar): LongWord;
 constructor Create(const Source: PChar);
 function ToChars(): PChar;
 end;
 function FTString.StrLen(const Source: PChar): LongWord;
 var
 i: LongWord;
 begin
 i := 0;
 
 while (Source[i] <> #0) do
 begin
 inc(i);
 end;
 
 Result := i;
 end;
 constructor FTString.Create(const Source: PChar);
 var
 i: LongWord;
 begin
 Posit := StrLen(Source);
 
 Total := Posit + 1;
 SetLength(Data, Total);
 
 for i := 0 to Posit do
 begin
 Data[i] := Source[i];
 end;
 Data[Posit] := #0;
 end;
 function FTString.ToChars(): PChar;
 begin
 Result := @Data;
 end;
 
 var
 Buffer: FTString;
 
 begin
 Buffer := FTString.Create('Hello World!');
 
 WriteLn(Buffer.ToChars());
 end.




