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

 
Andrei Trukhanovich:

похоже что count=0 работает так же как count=-1 и в случае "" копирует терминальный ноль.

В этом и заключается ошибка, просто показана на практическом примере где в общем случае могут быть как пустые строки, так и count = 0 сам по себе (в цикле например)

 
A100:

И сколько

должна по Вашему скопировать символов при count = 0 ?

Подсказка: при count = 3 копируется 3 символа

Даже спорить не буду. Работает правильно.

Andrei Trukhanovich:

похоже что count=0 работает так же как count=-1 и в случае "" копирует терминальный ноль, получается без дополнительных проверок пустую строку нормально преобразовать не удастся

Пустая строка (NULL) не содержит терминального нуля. По-моему, все там работает логично.

 
fxsaber:

Даже спорить не буду. Работает правильно.

Если аргументов нет, тогда конечно не нужно

fxsaber:

Пустая строка (NULL) не содержит терминального нуля. По-моему, все там работает логично.

Пустая строка - это "", а NULL - это не пустая строка - это неинициализированная строка, т.е. это вообще не строка и StringToCharArray c NULL не работает, результат ошибка: 4009

 
A100:

Если аргументов нет, тогда конечно не нужно

Пустая строка - это "", а NULL - это не пустая строка - это неинициализированная строка, т.е. это вообще не строка и StringToCharArray c NULL не работает, результат ошибка: 4009

Заблуждаетесь, мягко говоря.

 
fxsaber:

Заблуждаетесь, мягко говоря.

Объясните пожалуйста, если есть что сказать по существу вопроса

 
A100:

Объясните пожалуйста, если есть что сказать по существу вопроса

string Str = NULL;

Print(Str == "");
 
fxsaber:

Результат: false

И в чем противоречие с этим утверждением?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2021.05.24 20:07

Пустая строка - это "", а NULL - это не пустая строка - это неинициализированная строка, т.е. это вообще не строка и StringToCharArray c NULL не работает, результат ошибка: 4009


 
A100:

Результат: false

И в чем противоречие с этим утверждением?

Переменная инициализирована. Вы, конечно, можете считать string указателем на внутренний класс строки.

 
fxsaber:

Переменная инициализирована. Вы, конечно, можете считать string указателем на внутренний класс строки.

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

void OnStart()
{
    uchar array[];
    const string text = NULL;
    StringToCharArray( text, array );
    Print( GetLastError());
}

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

ERR_NOTINITIALIZED_STRING

4009

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

 
fxsaber:

Даже спорить не буду. Работает правильно.

Пустая строка (NULL) не содержит терминального нуля. По-моему, все там работает логично.


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

Print(StringToCharArray( "ABC", array, 0, 0));
Причина обращения: