Ошибки, баги, вопросы - страница 3011

 
Roman:

Этот вопрос наверно уже не ко мне, а к разработчикам.
Но по этому параметру, выделяется размер памяти для динамического массива.
То есть для вас же удобство, чтоб самим не выделять память массива.
Плюс и проверка на корректность получается.

А в чем заключается проверка на корректность? - вот я допустим указал 0 - заведомо некорректное значение

void OnStart()
{
    uchar ch[];
    const string text = "ABCDEF";
    Print( StringToCharArray( text, ch, 0, 0 ));
}

И все скопировалось нормально, Результат: 7 - ошибок нет

 
A100:

А в чем заключается проверка на корректность? - вот я допустим указал 0 - заведомо некорректное значение

И все скопировалось нормально, Результат: 7 - ошибок нет

Тут вся хитрость в описании к функции ))

count=-1

[in]  Количество элементов массива для копирования. Определяет длину результатной строки. 
По умолчанию -1, что означает копирование до конца массива, либо до встречи терминального 0. 
Терминальный 0 также будет скопирован в массив-приемник, при этом размер динамического массива может быть увеличен при необходимости под размер строки. 
Если размер динамического массива больше длины строки, то размер массива уменьшен не будет. 

автоматика прогресса ))
что больше запутывает пользователя.

 
Roman:

Этот параметр не для того, чтоб указывать сколько вы хотите скопировать символов, как субстрока
а для того чтоб указать какой размер символов передаётся в массив.

справка не согласна с такой трактовкой.

Количество элементов массива для копирования. Определяет длину результатной строки. По умолчанию -1, что означает копирование до конца массива, либо до встречи терминального 0. Терминальный 0 также будет скопирован в массив-приемник, при этом размер динамического массива может быть увеличен при необходимости под размер строки. Если размер динамического массива больше длины строки, то размер массива уменьшен не будет.

описание конечно атас - строка упоминается как массив, массив как строка, разброд и сумятица

Количество элементов массива (строки) для копирования. Определяет длину результатной строки (массива). По умолчанию -1, что означает копирование до конца массива (строки), либо до встречи терминального 0.

 
Andrei Trukhanovich:

справка не согласна с такой трактовкой.

Справка написана для mql, а mql написан на сях ))
Зная основы си, будет понятно что к чему. 

 
Roman:
Я думаю все проще - вы не поняли что написано в справке
 
Andrei Trukhanovich:
Я думаю все проще - вы не поняли что написано в справке

По большому счёту, она не корректна!

 
Roman:

По большому счёту, она не корректна!

тут спорить не буду

 
Roman:

Справка написана для mql, а mql написан на сях ))
Зная основы си, будет понятно что к чему. 

В Си размеры массива и строки заранее неизвестны, а MQL известны - это существенное отличие - поэтому в MQL не нужны избыточные параметры их дублирующие 

 
A100:

В Си размеры массива и строки заранее неизвестны, а MQL известны - это существенное отличие - поэтому в MQL не нужны избыточные параметры их дублирующие 

Динамический массив, на то и динамический, что он ожидает от пользователя получить любой размер.
Чтобы динамический массив понял что от него хотят, программист должен ему сказать:

-Эй, динамический массив, я хочу передать тебе данные.
а он тебе в ответ:
-А какого типа, и какого размера твои данные?
ты ему:
-Вот, char 100 элементов
он в ответ:
-Хорошо, если я того же типа, выдели мне память, в 100 байт под эти элементы и тогда отправляй. Иначе не приму.

;))

Но вам упростили жизнь, указав даже ноль в параметре, автоматизация процесса сама рассчитает размер передаваемых данных.
Так сказать дополнительная защита от новичков. Но лучше явно передавать размер, чтоб его самому контролировать, иначе замучаешься потом дебажить.
 
Roman:

Динамический массив, на то и динамический, что он ожидает от пользователя получить любой размер.
Чтобы динамический массив понял что от него хотят, программист должен ему сказать:

-Эй, динамический массив, я хочу передать тебе данные.
а он тебе в ответ:
-А какого размера твои данные?
ты ему:
-Вот, 100
он в ответ:
-Хорошо, выдели мне память, под 100 элементов, и тогда отправляй. Иначе не приму.

;))

Но вам упростили жизнь, указав даже ноль в параметре, автоматизация процесса сама рассчитает размер передаваемых данных.
Так сказать дополнительная защита от новичков. Но лучше явно передавать размер, чтоб его самому контролировать, иначе замучаешься потом дебажить.

если честно это жесть в критических случаях для массива. что мы и видим в виде выхода за размер динамического массива.... хотя в обычных условиях удобно...