Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несоответствие в TrimLeft


AndrewA ©   (2003-09-18 09:03:00) 

Функция TirmLeft в паскалевской и ассемблерной версии работают по разному, если в начале строки присутствует символ с кодом 0. Паскалевский вариант считает этот символ пробельным и нормально удалает, ассемблерный же вариант считает этот символ концом строки и, соответственно, возвращает пустую строку. Можно ли все привести к работе, как в паскалевском варианте?


miek   (2003-09-19 20:08:00) [1]

Эта проблема во всех (вроде) строковых KOL-функциях. Для обычных паскалевких строк использован код для ASCIIZ. Кладов говорил, что-де это не бага, а фича и исправлять он ее не намерен.
В конце концов, недолго же и самому руками сделать.


AndrewA   (2003-09-19 08:32:00) [2]

Вот этот код выводит разный текст в паскалевской и ассемблерной версии.


program test;

{$apptype console}

uses
 Kol;

var
 str1: String;

begin
 str1 := '  Test  ';
 str1[1] := #0;
 WriteLn('"' + str1 + '"');
 WriteLn('"' + TrimLeft(str1) + '"');
end.


Gandalf   (2003-09-18 20:17:00) [3]

Код в пример приведи.


AndrewA   (2003-09-18 16:29:00) [4]

Может быть я не совсем точно выразился, но я имел ввиду функцию TrimLeft в библиотеке KOL, именно в ней есть такие проблемы.

А то, что "ассемблер не может ничего сделать", это несколько преувеличен :) Здесь проблемы именно в алгоритме, TrimRigth, например, работает с такими строками корректно.


FoxBox   (2003-09-18 10:04:00) [5]

Знаешь, чем отличается тип pChar от String? Вот поэтому ассемблер и не может ничего сделать... Фактически, ассемблер и паскаль работают с разными типами. В случае pChar концом строки служит '0' в строке. В Sting длина строки определяется с помощью 1 - 2 байт (в зависимости от компилятора) в начале строки. Поэтому если ты работаешь с ASM-вставками, пробегись по строке и исключи символы: ord(mystring[i]) = 0


Наверх

Титульная страница Поиск, карта сайта Написать письмо