Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
ВнизМожно ли хранить chr(0) в длинных строках D5 ? Найти похожие ветки
← →
JohnJohn (2003-11-27 18:40) [0]Как можно хранить chr(0) в D5 ?
По условиям задачи прежде всего нужно хранить строки с произвольным содержимым (в том числе и с CHR(0)) и произвольной длинной (скорее всего большей 255 символов).
Если строки никак, то каковы другие высокопроизводительные варианты?
Спасибо.
← →
Юрий Федоров (2003-11-27 18:45) [1]Хранить можно.
Выводить нельзя - обрежется по #0.
А как хранить? так же как и те, которые без #0
потому что длина строки определяется не первым вхождением #0,
а хранится отдельно
← →
AlexKniga (2003-11-27 19:03) [2]setlength();
← →
Юрий Зотов (2003-11-27 19:37) [3]> По условиям задачи прежде всего нужно хранить строки с
> произвольным содержимым (в том числе и с CHR(0)) и
> произвольной длинной
Это означает, что задача поставлена неверно. Потому что постановка навязывает возможный, но очень плохо подходящий метод решения. Замена строк на packed array of byte решает все проблемы.
← →
JohnJohn (2003-11-28 05:52) [4]Ага, приблизительно про chr(0) понял, но...
Строки - это так, на всякий случай, потому что могет потребоваться сортировки и прочее.
За packed array of byte отдельное спасибо...:)
Только вот непонятно, что значит "при выводе обрежется".
Имеется в виду, в визуальных компонентах или вообще, даже при выводе через winapi?
← →
Anatoly Podgoretsky (2003-11-28 07:23) [5]Обрежется не только при выводе, а во всех тех функция, где оиждается PChar и соответственно обрезка произойдет по #0. Но тоже проихойдет и с array of byte если этот буфер будет передан в такие функции.
← →
Danilka (2003-11-28 08:44) [6][4] JohnJohn (28.11.03 05:52)
> Имеется в виду, в визуальных компонентах или вообще, даже
> при выводе через winapi?
В винАПИ используются строки с завершающим нулем, VCL - обертка винАПИ, короче, обрежется везде, при выводе на экран.
Правда, явно постановка хромает, нафига выводить на экран символ #0? :))
Одно дело - работа с бинарными данными, другое - обзывать их строками и работать с ними как со строками, во втором случае поимеешь глюки.
← →
Dimka Maslov (2003-11-28 08:53) [7]Как раз при выводе на экран и сравнении строк средствами выньапи не обрежется, поскольку эти функции принимают длину строки в явном виде, а не опираются на завершающий #0. Кто не верит может попробовать сам.
← →
Anatoly Podgoretsky (2003-11-28 08:57) [8]Во многих так, а в других наоборот, просто надо учитывать простой факт, ряд функций опирается на переданую длину, ряж на ограничитель строки.
← →
Danilka (2003-11-28 09:06) [9][7] Dimka Maslov © (28.11.03 08:53)
угу, точно, прав ты, сейчас попробовал вывести DrawText - все ок. В то-же время, передать такой текст контролам - нельзя, обрежется.
← →
Alexander1966 (2003-11-28 11:32) [10]Можеш хранить в string;
Например:
s1:="111";
s2:=s1+char(0)+s1;
//s2 будет содержать в итоге 111_111 (_ это нулевой символ)
но ShowMessage(s2); покажет только 111
поэтому если тебе надо не для вывода,
а например для шифрования данных
или подготовки пакета для TCP/IP (как в Indy )
то подойдет string.
PS. А вот в С++Builder, мне пришлось работать с
STL для этого (vector, queue)
← →
JohnJohn (2003-12-02 12:08) [11]Ок, спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c