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

 
A100:

Если инициализирована, то почему тогда при выполнении

возникает ошибка 4009 

ERR_NOTINITIALIZED_STRING

4009

Неинициализированная строка

Это вопрос терминологии.

 
mktr8591:

Проблема не в этом, а  в том, что это код возвращает 4, а должен возвращать 0.

Это только значит, что -1 и 0 имеют одинаковый результат. Такой же результат, возможно, даст INT_MAX и что-то другое.

Знать/узнавать некоторые особенности штатный функций - нормально.
 
fxsaber:


Знать/узнавать некоторые особенности штатный функций - нормально.

Конечно. Особенно, когда особенность - баг ))

Ну и однозначно добавить в ветку "Особенности языка mql5..."

 
fxsaber:

Это только значит, что -1 и 0 имеют одинаковый результат.

если по-вашему это логично и правильно, по мне это повод задуматься о логичности вашей логики

 
const string text[] = { "ABC", "", "ABC" };    
uchar array[];
    
int start = 0;
int n     = 0;
    
for(int i=0; i < ArraySize(text); i++)
{
   const int count = StringLen(text[i])+1;
   Print(count);
        
   n += StringToCharArray(text[i], array, start, count);
   start += count;
}
    
Print(ArraySize(array), ":", n );
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 4
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 1
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 4
2021.05.24 22:56:35.959 Test (AUDUSD,M5) 9:9
 
mktr8591:

Конечно. Особенно, когда особенность - баг ))

Ну и однозначно добавить в ветку "Особенности языка mql5..."

Немного подправить документацию и уже не баг.

Andrei Trukhanovich:

если по-вашему это логично и правильно, по мне это повод задуматься о логичности вашей логики

Философия далека от практики.

 
Roman:

+1 не нужен, поскольку требуется чистое копирование (без завершающих нулевых символов). Если хотите доказать, что это не баг, то нужны аргументы

 
A100:

требуется чистое копирование (без завершающих нулевых символов)

if (StringLen(text[i]))
  start += StringToCharArray(text[i], array, start, StringLen(text[i]));

Это очень бородатая конструкция.


ЗЫ

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

const string text[] = { "ABC", "", "ABC" }; 

void OnStart()
{
  ArrayPrint(_R(text).Bytes); // Побайтовое представление массива.
  
  string Str;  
  _W(Str) = text;
  
  ArrayPrint(_R(Str).Bytes); // Побайтовое представление объединенной строки.
}
 
fxsaber:

Немного подправить документацию и уже не баг.

Философия далека от практики.

А как практик объяснит теоретикам такой противоречивый результат:

void OnStart()
{
    string text = "ABC";
    const int start = 0, count = 0;
    uchar array1[]; int n1 = StringToCharArray(  text, array1, start, count );
    short array2[]; int n2 = StringToShortArray( text, array2, start, count );
    Print( n1, ":", n2 );
}

Результат:   4:0

Ожидалось: 0:0 

или тоже - чуть подправить документацию? Ну не исправлять же баги в конце концов!

У меня объяснение простое: в одной из этих штатных функций баг - и я даже знаю в какой

 
A100:

А как практик объяснит теоретикам такой результат:

У меня объяснение простое: в одной из этих функций баг - и я даже знаю в какой

Багом является несоответствие этих двух функций, а не их результат, т.к. это только вопрос документации, что выдавать при count=0.

Причина обращения: