Тёмная магия или не объединяющиеся строки

Inkognitoo

Звучит бредово, но у меня не получается объединить строки. Код типа:
SomeText:= myString1 + myString2;
ShowMessage( SomeText);
Выдаёт только значение myString1. С чем это может быть связано?
2 ответа

Inkognitoo

Думаю, проблема в формировании исходных строк. Перед объединением выдай в какие-то Label-ы обе исходные строки. И посмотри, что там в них.


Inkognitoo

Согласен с Одиночка. - От содержания строк зависит. Логика ShowMessage(S) учитывает терминальный ноль. Распечатывается только та часть S, которая идёт до первого символа с кодом #0. Строки типа AnsiString, String (в Delphi 7 String = AnsiString), WideString содержат терминальный ноль на позиции Length(S) + 1. Этот терминальный ноль автоматически обрабатывается кодом программы.
var
  S1, S2, S3 : String;
begin
  //Компилятор формирует код, который учитывает терминальный ноль на позиции: Length(S) + 1:
  
  S1 := '1234'; //S1 = '1234'#0
  S2 := '5678'; //S2 = '5678'#0
  S3 := S1 + S2; //S3 = '12345678'#0
  ShowMessage(S3) //Будет показано: 12345678
  
  //Программист может сам записать символ с кодом #0 на любое место в строке на позиции: 1..Length(S):
  
  S1 := '1234'#0; //S1 = '1234'#0#0
  S2 := '5678';   //S2 = '5678'#0
  S3 := S1 + S2; //S3 = '1234'#0'5678'#0
  ShowMessage(S3); //Будет показано: 1234
  
  S1 := '12'#0'34'; //S1 = '12'#0'34'#0
  S2 := '5678';   //S2 = '5678'#0
  S3 := S1 + S2; //S3 = '12'#0'345678'#0
  ShowMessage(S3); //Будет показано: 12
end;
Также, терминальный ноль учитывается в работе визуальных компонентов: TLabel, TEdit, TMemo и других.