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

fxsaber #:

Не первый месяц сталкиваюсь, что темы в Избранном помечаются обновленными. Захожу, а там последнее - мое сообщение. Причем оно может быть написано несколько часов назад. И там точно никакой спам модератор не чистил.

Наблюдаете такое у себя?

Да постоянно)

А ещё, просмотришь избранное на компе, потом заходишь с телефона, а оно не просмотренное, Все те же сообщения, что до этого смотрел на компе.

fxsaber #:

Не первый месяц сталкиваюсь, что темы в Избранном помечаются обновленными. Захожу, а там последнее - мое сообщение. Причем оно может быть написано несколько часов назад. И там точно никакой спам модератор не чистил.

Наблюдаете такое у себя?

Да, это правки сообщений участниками или модерация. 
Ошибка при выполнении:
void OnStart()
{
    string text = "ABC" + "\0" + "DEF", result[];
    Print(StringLen(text), ":", StringSplit(text,'\0',result));
}

Результат:   7:1

Ожидалось: 7:2

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

Результат:   7:1

Ожидалось: 7:2

Ожидал: 3:1. StringLen, видимо, при подобной инициализации иначе работает.

void OnStart()
{
  string text = "ABC" + "\0" + "DEF";
  ushort Words[];
  
  Print(StringLen(text)); // 7
  Print(StringToShortArray(text, Words)); // 8
  
  string text2 = ShortArrayToString(Words);
  
  Print(StringLen(text2)); // 3  
  Print(StringToShortArray(text2, Words)); // 4
}
fxsaber #:

Ожидал: 3:1. StringLen, видимо, при подобной инициализации иначе работает.

А обоснование то какое?

StringLen

Возвращает число символов в строке

        "ABC" + "\0" + "DEF"

3+1+3=7 символов - почему Вы 3 то ожидали ?

A100 #:

А обоснование то какое?

StringLen

Возвращает число символов в строке

3+1+3=7 символов - почему Вы 3 то ожидали ?

Выше пример специально привел, как из Words8] получается Stringlen = 3. Ноль - конец строки.

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


Думаю, для string оператор сложения складывает StringLen слагаемых. Тогда получается семь - хранится длина в private-поле, как у массивов.

fxsaber #:

Выше пример специально привел, как из Words8] получается Stringlen = 3. Ноль - конец строки.

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

Никаких сложностей с хранением нуля в string нет

И результат Ваше примера

        Print(StringToShortArray(text, Words)); // 8

это подтверждает

A100 #:

Никаких сложностей с хранением нуля в string нет

И результат Ваше примера

это подтверждает

Читайте последние строки кода.

Что касается функций StringToShortArray и ShortArrayToString, то в общем случае там вообще какие то случайные результаты получаются:

void OnStart()
{
    string text = "ABC" + "\0" + "DEF";
    ushort Words[];
    Print(StringToShortArray(text, Words, StringLen(text)));
    Print(ArraySize(Words));
    Print(StringLen(ShortArrayToString(Words, 0, ArraySize(Words))));
}

Результат: 8:15:10

fxsaber #:

Читайте последние строки кода.

Вы используете параметры по умолчанию - а для них в Документации прописан особый порядок - приведите полноценный пример