Традиционная строка C (доступная через char const*
) имеет последовательность символов, оканчивающихся символом 0. (Не цифра 0
, а фактическое нулевое значение, которое мы записываем как '\0'
.) нет явной длины & mdash; поэтому различные строковые операции просто читают один символ за раз, пока он не достигнет '\0'
.
C ++ std::string
имеет явную длину в своей структуре.
Возможно ли, что схема памяти символов вашей строки выглядит следующим образом:
'NTNT\0'
но длина строки установлена в 2?
Это приведет именно к такому поведению & mdash; манипулирование std::string
напрямую приведет к тому, что он будет длиться всего два символа, но если вы выполняете традиционные операции C с использованием s.c_str()
, это будет выглядеть как "NTNT"
.
Я не уверен, что махинации приведут вас в такое состояние, но оно точно будет соответствовать симптомам.
Один из способов попасть в это состояние - на самом деле записать в символы строки, что-то вроде: strcat((char *)s.c_str(), "NT")