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

 
Ошибка при выполнении:
string f( const string& s, string p = "&" ) 
{
    string    ss = NULL;   
    StringAdd(ss,s);
    StringAdd(ss,p);
    StringAdd(ss,s);
    string result[];
    StringSplit(ss,StringGetCharacter(p,0),result);
    return result[0];
}
void OnStart()
{
    const string s1 = "abc\0def",
	         s2 = "01234567";
    Print(s1 == f(s1), ":", s2 == f(s2));
}

Результат:   false:true

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

 
A100 #:
Ошибка при выполнении:

Результат:   false:true

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

Вряд ли это ошибка.

const string s1 = "abc\\0def"

Результат:  true:true

 
Aleksandr Slavskii #:

Вряд ли это ошибка.

Результат:  true:true

Не путайте - у Вас другая исходная строка (поэтому и результат другой) - для понимания разницы сравните их через StringLen

 

Извините если что , я создал ветку https://www.mql5.com/ru/forum/455210/page2

нужно было сразу здесь вопросы задавать , может кто подскажет решения проблемы

Вопрос про iBarshift MT5
Вопрос про iBarshift MT5
  • 2023.10.05
  • www.mql5.com
Доброго времени суток! Столкнулся с такой проблемой: Период MN , iBarShift не находит бар по времени хотя время определяется нормально...
 
Artem Sulejmanov #:

Извините если что , я создал ветку https://www.mql5.com/ru/forum/455210/page2

нужно было сразу здесь вопросы задавать , может кто подскажет решения проблемы

Вам в Вашей ветке, на которую Вы здесь дали ссылку, всё подробно пояснил Сергей Голубев.

Приложите код, который со 100% результатом будет выдавать ошибку, пожалуйста.

Не забывайте, что это технический форум, где эмоции остаются у Вас, и никого более не касаются.

 
A100 #:

Не путайте - у Вас другая исходная строка (поэтому и результат другой) - для понимания разницы сравните их через StringLen

Ну так то и в вашей строке,  показывает не восемь символов. 

 StringLen("abc\0def") = 7

StringLen("\r\n") = 2

То есть мы видим, что строковая переменная не видит обратный слэш.

Не могу найти где читал об этом в справке, и читал ли. 

Возможно это не баг, а фича)))


А распечатать вашу строку вообще не получится Print("abc\0def");  - выдаёт ошибку.

 
Artem Sulejmanov #:

Извините если что , я создал ветку https://www.mql5.com/ru/forum/455210/page2

нужно было сразу здесь вопросы задавать , может кто подскажет решения проблемы

Я использую в советниках, что то типа такого

   int bars = iBars(_Symbol, PERIOD_CURRENT);
   int shift = 10;
   if(shift > bars)
      return;
   while(iBarShift(_Symbol, PERIOD_CURRENT, shift) < 0 && !IsStopped())
      Sleep(300);

В индикаторах Sleep  не работает, поэтому там без while  просто  return 0;

 
Aleksandr Slavskii #:

Ну так то и в вашей строке,  показывает не восемь символов. 

 StringLen("abc\0def") = 7

StringLen("\r\n") = 2

То есть мы видим, что строковая переменная не видит обратный слэш.

Разберитесь в основах - там нет обратного слеша

\0 это единый символ, такой же как допустим \r или \n

 
void OnStart()
{
  Print(StringLen("123\0" + "4567")); // 8
  Print(StringLen("123\04567"));      // 4
}
 
fxsaber #:

И в чем ошибка? \04567 это единый символ в восьмеричной записи, а + это конкатенация двух независимых строковых констант - соответственно и результат разный