Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2012, 21:28   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Сообщение от GunSmoker
Позвольте мне вас запутать: String или, более точно, AnsiString (в Delphi 2009 и выше: UnicodeString) фактически является PChar-ом. Точно так же, как и PChar, строка представляет собой указатель на массив символов, заканчивающихся символом #0. Но есть одно большое отличие: обычно вам не нужно думать, как работают строки. Их можно использовать не задумываясь, почти как любую другую переменную. Компилятор сам заботится о вызове кода для выделения, копирования и освобождения текста строк. Поэтому вместо ручного вызова подпрограмм типа StrCopy, вы просто позволяете компилятору сделать это за вас.

Но это ещё не всё. Хотя текст, несомненно, всегда заканчивается символом #0 – сделано это только для того, чтобы сделать строки Delphi совместимыми со строками C, сам компилятор не нуждается в терминаторе. Перед текстом строки в памяти, по отрицательному смещению указателя, хранится длина строки, как число Integer. Так что, чтобы узнать длину строки, компилятор просто читает этот Integer, экономя на поиске первого #0 в строке.
Линк: http://www.transl-gunsmoker.ru/2009/09/pchars.html


Последний раз редактировалось Человек_Борща; 26.02.2012 в 21:31.
Человек_Борща вне форума Ответить с цитированием
Старый 26.02.2012, 23:14   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Человек_Борща, я это все знаю.

я про данную ситуацию, работа-то идет именно с string.
и ваш код был неверен для него.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.02.2012, 00:02   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

поражаюсь..
на ровном месте такую дискуссию развели.

Цитата:
и ваш код был неверен для него.
ну разумеется, пример с минус единицей был ошибочным.
Человек_Борща, неужели трудно взять любую версию Delphi
и проверить
Код:
var s : string;
...
  s := 'ABC';
  Выдать( Length(s) ); {очевидно, что длина будет равна 3 (трём)}
  Выдать( s[1] ); { получим A}
  Выдать( s[Length(s)] ); { получим C}
?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.02.2012, 00:06   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Serge_Bliznykov, сделал и не один раз.
Ссылку и цитату привел для себя, и тех кому что-то не понятно.
Не отрицаю, что ошибся.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
количество слов, первая и последняя буква которых совпадают gred Помощь студентам 4 13.11.2014 13:56
Является ли вторая буква в слове гласной Fermeroid Помощь студентам 3 12.01.2012 09:20
Буква в i-ом слове строки. Nicole Общие вопросы Delphi 5 14.04.2011 08:12
первая буква в слове Cdevelop Общие вопросы C/C++ 2 17.03.2009 13:44