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

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

Что то непонятне с компилятором? Или я неумею программировать?


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?


Наверх

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