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

 
Vict:

Что-то вы заигрались с предупреждениями на мой взгляд, не хватает последовательности в суждениях

не работают на булевые операции предупреждения, сейчас случайно заметил опечатку в коде у себя, вот воспроизвел:

#define              getAsk(dummy)          SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define              getBid(dummy)          SymbolInfoDouble(_Symbol, SYMBOL_BID)
//+------------------------------------------------------------------+
void OnStart()
  {
      double sl = 0.0,tp=0.0;
      if(sl != !OrderStopLoss() || tp != OrderTakeProfit()) Print("");  
  }
//+------------------------------------------------------------------+

double OrderStopLoss()
{
   return(getAsk());
}

double OrderTakeProfit()
{
   return(getBid());
}
 
Roman:

Не инициализирует пустую строку терминальным нулём.

Результат

Ожидалось

Примечание в справке к функции StringInit

По факту не какого распределения не происходит.
т.е распределение таким способом, десять пробелов

не то же самое, что

И как то не сходится логика поведения, в тексте справки выделенное красным.

Вы упустили из виду функцию StringBufferLen - она возвращает размер выделенного буфера. StringLen возвращает длину строки, то есть до терминального символа, соответственно, если он в самом начале - длина 0. Буфер != строка.

 
Stanislav Korotky:

Вы упустили из виду функцию StringBufferLen - она возвращает размер выделенного буфера. StringLen возвращает длину строки, то есть до терминального символа, соответственно, если он в самом начале - длина 0. Буфер != строка.

А то он сам не знает

 
Stanislav Korotky:

Вы упустили из виду функцию StringBufferLen - она возвращает размер выделенного буфера.
StringLen возвращает длину строки, то есть до терминального символа, соответственно, если он в самом начале - длина 0. Буфер != строка.

Это понятно, речь об инициализации строки терминальными нулями.
Почему бы в StringInit(str, 10, 0); не заполнить десятью терминальными нулями ? И вернуть реальную длину строки. 
Если нужно инициализировать пустую строку, без заполнения! к примеру в 100 символов,
тогда или 100 пробелов в виде str = " много тыканий в клаву ", или инициализировать мусором StringInit(str, 100, 65)
Не пойму зачем инициализировать мусором, его и так хватает ))


[Удален]  
Roman:

Это понятно, речь об инициализации строки терминальными нулями.
Почему бы в StringInit(str, 10, 0); не заполнить десятью терминальными нулями ? И вернуть реальную длину строки. 
Если нужно инициализировать пустую строку, без заполнения! к примеру в 100 символов,
тогда или 100 пробелов в виде str = " много тыканий в клаву ", или инициализировать мусором StringInit(str, 100, 65)
Не пойму зачем инициализировать мусором, его и так хватает ))


А с чего взяли, что не заполняется? Просто длина в мкл стринге не хранится, а узнаётся по терминальному нулю.

StringInit(str, 100, ' ');

не?

А если нужны именно нули, то где-то в недрах мкл стд есть класс String.

 
Vict:

А с чего взяли, что не заполняется? Просто длина в мкл стринге не хранится, а узнаётся по терминальному нулю.

не?

А если нужны именно нули, то где-то в недрах мкл стд есть класс String.

Не.. Так тоже возвращает ноль. Да и третий параметр ushort, требует целочисленный код символа.

Если инициализирую в виде str = "      "; а потом передаю данные из dll то всё норм.
А если инициализирую StringInit(str, 10, 0) то данные не поступают. Потому что не выделена память для строки нужного размера.

Если бы был код для пробела, возможно бы и сработало, но что то я не нашёл такой код в разных таблицах.
Нужно выделить именно память под количество будущих символов, которые потом поступят в уже инициализированную, пустую строку.
Но мусором инициализировать строку, не комильфо.
По этому StringInit(str, 100, 0); должен заполняться терминальными нолями, и возращать длину 100.

[Удален]  
Roman:

Если бы был код для пробела, возможно бы и сработало, но что то я не нашёл такой код в разных таблицах.

)) Дублирую

StringInit(s, 100, ' ');
 
Vict:

)) Дублирую

Вкурил )) что одинарные кавычки.
Вроде то что надо, возвращает указанное число.
Спасибо Vict, а то я замучался искать целочисленный код.

И в справке об этом не слова.


[Удален]  
Roman:

замучался искать целочисленный код.

0x20

 
Vict:

0x20

Воо, по хексу и Dec нашёлся, 32
Ещё раз спасибо.