Помощь - Поиск - Пользователи - Календарь
Полная версия: переменная типа STRING
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Общие вопросы разработки программ
Unkind
Можно ли в переменную типа STRING ввести маркер конца строки?может ли он вообще в нем содержаться?каким образом?
volvo
Переменная типа String (если ты о Паскалевском типе) устроена так, что ей не надо маркер конца строки - длина строки хранится в ее первом байте. Если надо строку с терминатором - пользуйся типом PChar - это аналог С-шных строк, оканчивающихся нулем.

В крайнем случае, можно и в String записать символ #0, но при выводе этой строки стандартными методами, такой маркер не будет приниматься во внимание:

var s: string;
begin
s := 'test '#0' it';
writeln(s);
end.
Будет выведено
test   it


, а не просто "test"...

Можно, опять же, считать, что любой символ (например '#') - это маркер конца строки, но тогда тоже придется переписывать функции работы со строками...
SKVOZNJAK
Причём здесь ноль - в виндовсе и досе другой маркер конца строки. Не проверял, как выводится в виндовсе символы маркера - 13 и 10, но в линуксе всё работает. Здесь маркер состоит из одного символа с порядковым номером 10
var
S:String;

begin
S:='1234567890';
S[9]:=Chr(10);
writeln('');
writeln(S);
end.


Изображение
volvo
Цитата
Причём здесь ноль - в виндовсе и досе другой маркер конца строки
Правда что-ли? #13 и #10 - это вообще-то CR/LF (Carriage Return/Line Feed), что в переводе означает
Цитата
Возврат каретки - символ, при выводе которого курсор перемещается к левому краю поля, не меняя высоту.
...
Подача строки - символ при выводе которого «курсор» перемещается на следующую строку.
Где здесь маркер, повествующий о том, что строка уже закончилась, и дальше не нужно ее просматривать, можно поподробнее?
SKVOZNJAK
Цитата
, что в переводе означает

Английский язык за качество не пинал только фанат и ленивый.

Цитата
Где здесь маркер, повествующий о том, что строка уже закончилась, и дальше не нужно ее просматривать, можно поподробнее?


Создай простой текст в редакторах типа блокнота на разных операционках и просмотри побайтово. Нету там нуля в конце строки. Символы #13,#10 стандарт по факту маркера EOL для виндовса, #10 для линукса, #13 для макинтоша. Первоначально стандарты как раз и разрабатывались для удобства печатания: операционки-то были маленькие а принтеры матричные, насыщать текстовики вордовским мусором было совсем не обязательно.
Текст набранный в блокноте:
Код
qwe
1234
ddfgghj

А вот как этот текст выглядит в редакторе в виде двоичного файла
Изображение
#0 в ASCII шрифте выглядит также как и #32, и где он здесь между строк? Конец строки обозначается маркером #13,#10. Аналогичная картина в досе и линуксе, маки не тестил, но по коственным данным (кнопкам в редакторе kwrite)и там в конце строки простого текстового файла ставится не #0. Поставь #0 в концах строк в батника, запусти и полюбуйся на глюки. Похоже система об упоминаемом тобой формате ничего не знает.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.