RaFaeL писал(а): ↑21 Октябрь 2018, 9:51Почитай что такое CSTRING и в чем отличие от STRING, может и не будет "фокусов"
Отличие мне хорошо известно:
CSTRING (строка фиксированной длины, завершающаяся нулем)
метка СSTRING( length
string constant
picture )[,DIM()][,OVER()][,NAME()] [,EXTERNAL]
Формат: Фиксированное число байт.
Диапазон: От 1 до 65,535 байт
length Числовая константа, которая задает размер строки в байтах. При использовании этого параметра,строка инициализируется пробелами.
string constant Начальное значение строки. Длина СSTRING-a устанавливается (в байтах) по длине этой строковой константы плюс завершающий нулевой символ.
picture Используется для форматирования значений, присвоенных строке. Длина такой строки, это количество байт, достаточное для хранения форматированной строки и завершающего нулевого символа. Строка инициализируется пробелами.
DIM Размерность(и) переменной как массива.
OVER Разделяет один и тот же участок памяти с другой переменной
NAME Задает внешнее имя для переменной.
EXTERNAL Указывает, что переменная описана и память под нее выделяется во внешней библиотеке. НЕ разрешено для описаний FILE, QUEUE и GROUP.
CSTRING описывает символьную строку, завершающуюся нулевым символом (ASCII NULL). Она соответствует строкам, используемым в языке C и типу данных "ZSTRING" в Btrieve Record Manager. Под CSTRING в памяти выделяется участок постоянной длины, при этом, завершающий нулевой символ помещается в конец введенных данных. CSTRING во время исполнения преобразовывается в промежуточный тип STRING. Тип CSTRING имеет смысл употреблять для совместимости с внешними файлами и/или процедурами.
Пример:
Name CSTRING(21) !Declare 21 byte field - 20 bytes data
OtherName CSTRING(21),OVER(Name) !Declare field over name field
Contact CSTRING(21),DIM(4) !Array 21 byte fields - 80
! bytes data Company
Company CSTRING('Clarion Software, Inc.') !23 byte string 22
! bytes data
Phone CSTRING(@P(###)###-####p) !Declare 14 bytes 13 bytes
! data
ExampleFile FILE,DRIVER('Btrieve') !Declare a file
Record RECORD
NameField CSTRING(21),NAME('ZstringField')
!Declare with external name
. .
https://clarionhub.com/t/diference-betw ... ring/249/5
То есть это не "фокус" это "фича" - если я правильно понял, для максимального использования размерности переменной типа CSTRING необходимо объявлять
VariableName CSTRING (4194305)?