У меня есть следующая строка:StD :: струны
index 0 1 2 3 4 5 6 7
std::string myString with the content of "\xff\xff\xff\x00\xff\x0d\x0a\xf5"
Когда я ссылаюсь на MyString [3], я получаю ожидаемый '\ x00' значение.
Но когда я имею в виду myString [5], я получаю два значения «\ x0d \ x0a» вместо «\ x0d».
Еще более интересным является значение myString [6], которое является «\ xf5». На этот раз это похоже на то, что \ x0d не существует, и на правильную позицию ссылались.
Мой вопрос будет таким: что особенного о символе \ x0d в объекте std: string? Почему это происходит при индексировании? Это как подсчет так:
index 0 1 2 3 4 5 5 6
std::string myString = "\xff\xff\xff\x00\xff\x0d\x0a\xf5"
В качестве комментария, символ «\ x0D» символ 13 ASCII символов «возврат каретки» и «\ x0a» является символом строки.
UPDATE: Может быть, std :: string считает «\ x0d \ x0a» единственным символом и, таким образом, занимает только одну позицию в строке? Является ли этот «\ x0d» символом «mystery» в отношении std :: string?
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: http://en.wikipedia.org/wiki/Newline
Может вы это показывает в небольшой, полной, компилируемый программы? Я не понимаю, как вы получаете два символа при доступе к индексу 5. В конце концов оператор '[]' возвращает только один символ. – sbi
is \ x0a line feed? Они могут рассматриваться как один символ, чтобы «разрыв строки» удерживал одинаковое количество индексов (один) в системах с различными стилями разрыва строки, хотя я действительно не уверен относительно внутренних действий std :: string, поэтому я не буду публиковать это как ответ. –
Я буду продолжать добавлять дополнительную информацию к этому вопросу. Действительно, ваша догадка может быть правильной: '\ x0a' - это фид строки, и кажется, что std :: string рассматривает их как один символ: '\ x0d \ x0a'. – citn