![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что то непонятне с компилятором? Или я неумею программировать?
Brave © (2007-11-14 06:27:00)У меня стоит Delphi 7 Enterprise, OS Windows XP SP2.
Такая ситуация:
Procedure TestBags;
Var
s:string[20];
Temp:String[20];
i:integer;
begin
s:='Ìó test';
For i:=0 to Length(s) do
Begin
Temp:=Temp+s[i];
ShowMessage(Temp);
End;
end;
Почемуто старока не записываеться в переменную Temp посимвольно из s.
Если сделать так:
Temp:=s[i]+Temp;
То в Temp все записывается только наоборот, правдо первый символ в переменной почемуто квадрат.
Я в шоке от такого поведения компилятора.Программирую уже 3 года - первый раз вижу такое! Кто нибудь сталкивался? Как исправить или обойти?
Anatoly Podgoretsky (2007-11-14 10:29:00) [1]> Jeer (14.11.2007 09:44:06) [6]
Вообще то и пенсия не поможет.
DrPass (2007-11-14 10:28:00) [2]
> icWasya © (14.11.07 09:44) [7]
> А если перед циклом написать Temp:='';???
...то ничего не изменится. Поскольку строки и динамические массивы в Delphi являются управляемыми типами данных, и в отличии от простых типов всегданеявно инициализируются пустыми значениями
Jeer (2007-11-14 09:44:00) [3]Как любит млад валить все проблемы на окружающий мир не замечая главную проблему - он сам.
> Или я неумею программировать
Разумеется.
> Программирую уже 3 года
Интересно, если не разобраться с short string стоило минимум 3 года, то когда же
наступит удовлетворительное овладение инструментом ?
К пенсии, возможно.
icWasya (2007-11-14 09:44:00) [4]А если перед циклом написать Temp:='';???
ЮЮ (2007-11-14 09:20:00) [5]
> Вообщем непонятный глюк, скорее всего OS, хоть и лицензия.
Это глюк в ДНК, однако.
Чего тут непонятно? В s[0] лежит длина символьной строки, а не первый символ, и для коротких строк получаем неотображаемый спецсимвол, изображаемый чаще всего квадратиком.
Brave (2007-11-14 06:54:00) [6]
> Даже 3 года назад символы строки индексировались с 1, а
> не с нуля
> всю строку скопировать можно обычным присвоением temp :=
> s;
>
Ой, с 0 ошибочка вышла не заметил. С этой проблемой я столкнулся как начал писать парсер, а это кусочек неработающего парсера.
Вообщем непонятный глюк, скорее всего OS, хоть и лицензия.
Igor Zorkov (2007-11-14 06:46:00) [7]
Procedure TestBags;
Var
s:string;
Temp:String;
i:integer;
begin
s:='to test';
i:= 0;
For i:=1 to Length(s) do
Begin
Temp:=s[i];
ShowMessage(Temp);
End;
end;
MBo (2007-11-14 06:46:00) [8]>Программирую уже 3 года - первый раз вижу такое
Даже 3 года назад символы строки индексировались с 1, а не с нуля
всю строку скопировать можно обычным присвоением temp := s;
Brave (2007-11-14 06:32:00) [9]Скомпилировал этот код на другой машине: Delphi6 Trial. OS Windows 2000 SP4.
Все нормально работает как и должно, но вопрос еще в силе. Как мне исправить глюк на 7-ом Delphi?