Форум «Всё о Паскале» _ Общие вопросы разработки программ _ переменная типа STRING
Автор: Unkind 23.02.2010 16:28
Можно ли в переменную типа STRING ввести маркер конца строки?может ли он вообще в нем содержаться?каким образом?
Автор: volvo 23.02.2010 19:53
Переменная типа String (если ты о Паскалевском типе) устроена так, что ей не надо маркер конца строки - длина строки хранится в ее первом байте. Если надо строку с терминатором - пользуйся типом PChar - это аналог С-шных строк, оканчивающихся нулем.
В крайнем случае, можно и в String записать символ #0, но при выводе этой строки стандартными методами, такой маркер не будет приниматься во внимание:
var s: string; begin s := 'test '#0' it'; writeln(s); end.
Будет выведено
test it
, а не просто "test"...
Можно, опять же, считать, что любой символ (например '#') - это маркер конца строки, но тогда тоже придется переписывать функции работы со строками...
Автор: SKVOZNJAK 27.02.2010 2:15
Причём здесь ноль - в виндовсе и досе другой маркер конца строки. Не проверял, как выводится в виндовсе символы маркера - 13 и 10, но в линуксе всё работает. Здесь маркер состоит из одного символа с порядковым номером 10
var S:String;
begin S:='1234567890'; S[9]:=Chr(10); writeln(''); writeln(S); end.
http://www.radikal.ru
Автор: volvo 27.02.2010 3:18
Цитата
Причём здесь ноль - в виндовсе и досе другой маркер конца строки
Правда что-ли? #13 и #10 - это вообще-то CR/LF (Carriage Return/Line Feed), что в переводе означает
Цитата
Возврат каретки - символ, при выводе которого курсор перемещается к левому краю поля, не меняя высоту. ... Подача строки - символ при выводе которого «курсор» перемещается на следующую строку.
Где здесь маркер, повествующий о том, что строка уже закончилась, и дальше не нужно ее просматривать, можно поподробнее?
Автор: SKVOZNJAK 27.02.2010 21:36
Цитата
, что в переводе означает
Английский язык за качество не пинал только фанат и ленивый.
Цитата
Где здесь маркер, повествующий о том, что строка уже закончилась, и дальше не нужно ее просматривать, можно поподробнее?
Создай простой текст в редакторах типа блокнота на разных операционках и просмотри побайтово. Нету там нуля в конце строки. Символы #13,#10 стандарт по факту маркера EOL для виндовса, #10 для линукса, #13 для макинтоша. Первоначально стандарты как раз и разрабатывались для удобства печатания: операционки-то были маленькие а принтеры матричные, насыщать текстовики вордовским мусором было совсем не обязательно. Текст набранный в блокноте:
Код
qwe 1234 ddfgghj
А вот как этот текст выглядит в редакторе в виде двоичного файла http://www.radikal.ru #0 в ASCII шрифте выглядит также как и #32, и где он здесь между строк? Конец строки обозначается маркером #13,#10. Аналогичная картина в досе и линуксе, маки не тестил, но по коственным данным (кнопкам в редакторе kwrite)и там в конце строки простого текстового файла ставится не #0. Поставь #0 в концах строк в батника, запусти и полюбуйся на глюки. Похоже система об упоминаемом тобой формате ничего не знает.