Странное поведение String::Метод удаления

#.net #visual-c

#.net #visual-c

Вопрос:

Я использую метод String::Remove для удаления первых трех символов строки. Однако я получаю неожиданные результаты от метода.

При первом запуске моей функции она возвращает строку с удаленными первыми двумя символами. При следующем запуске моей функции она возвращает строку, в которой удален только первый символ.

Есть ли скрытые символы в строке? Если да, то как мне их увидеть / удалить?

     String^ SendCommand(const String^ command)
    {
        lock l(thisLock);

        serialPort->WriteLine((String^) command);

        String^ response = serialPort->ReadLine();

        if (response[1] == CMD_ERROR_CHAR)
        {
            // Unknown command was sent
        }

        response = response->Remove(0, 3);

        return response;
    }
  

Согласно отладчику:

Run1:

(предварительно удалить) ответ = «: 0 ДЕСЯТЫХ»

(после удаления) ответ = «0 ДЕСЯТЫХ» (без пробела перед 0)

Run2:

(предварительно удалить) response = «:A -725»

(после удаления) ответ = «-725» (пробел перед -)

ОТВЕТИТЬ:

Я понял это, наконец.

По-видимому, окно просмотра не будет намекать на escape-символы в строке. Вы не будете знать, что они существуют, если специально не проиндексируете символ.

В Run2 я просмотрел ответ [0] в окне просмотра и заметил символ ‘ n’. Несмотря на то, что ответ отображался как «:A -725″, на самом деле это был » n:A -725″.

Вызвало у меня больше проблем, чем должно было быть.

Комментарии:

1. Должен ли Run2 представлять неправильный сценарий вывода? Я спрашиваю только потому, что это кажется правильным, поскольку оно удаляет «: A»…

2. Run1 удаляет «:A» (с конечным пробелом). Запуск 2 удаляет только «:A». Извините, я поясню это более четко в сообщении.

3. Вы пробовали просматривать отдельные символы по индексу? в противном случае вы также могли бы применить TrimStart() к строке, просто для уверенности.

4. Я почти уверен, что удаляется какой-то неграфический символ. Я просто не знаю, как просматривать неграфические символы в окне просмотра Visual Studio.

5. Я допустил опечатку :). Изменил его со 2 на 3 после того, как я понял. Они считываются с последовательного порта.