Странное поведение метода String :: Remove - PullRequest
2 голосов
/ 21 мая 2011

Я использую метод 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:

(pre-Remove) response = ": A0 TENTHS "

(post-Remove) response =" 0 TENTHS "(без пробела перед 0)

Run2:

(pre-Remove) response =": A -725 "

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

ОТВЕТ:

Iнаконец-то понял.

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

При запуске 2 я просмотрел ответ [0] в окне «Наблюдение» и заметил символ «\ n».Несмотря на то, что ответ показывался как «: -725», на самом деле это было «\ n: -725».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...