Любопытный фактец.
Если стандартную C++ стороку создавать из буфера с нулевыми символами на конце, нули будут учитываться в C++ классе, но, очевидно, что с т.з. C’шного представления строка заканчивается на нулевом символе. Т.о., существует такая строка Y, что она и равна созданной строке X, и одновременно неравна ей, в зависимости от того, используется ли C++ интерфейс или доступ к C’шной строке.
Вот пример:
#include <stdio.h>
#include <string>
#include <string.h>
int main()
{
char str[5] = {'A', 'B', '\0', '\0', '\0'};
auto s = std::string(str, 5);
auto s2 = std::string("AB");
// Strings are NOT equal!!!
printf("std::strings equal? %d\n", s == s2);
// But wait, they are equal
printf("C-strings equal? %d\n", strcmp(s.c_str(), s2.c_str()) == 0);
}
std::strings equal? 0
C-strings equal? 1
Это нормально вообще?