Доброго времени суток, Господа Форумчане!
Подскажите кто знает, пожалуйста, следующий момент: нужно ли выделять в std::string один байт на конец строки '\0'?
В обычных строках (char[]) ведь нужно было бы на строку "123" 4 байта — по одному на '1', '2' и '3' и один на '\0'.
В примере, приведенном ниже видно, что если выделить на один байт больше, то строки неправильно сравниваются, хотя strcmp возвращает ожидаемый результат. Судя по результату правильно было бы выделять 3 байта на такую строку, но что тогда будет с завершающим нулем?
#include <string>
#include <stdio.h>
#include <string.h>
#include <iostream>
int main(void)
{
std::string S1(3,' ');
sprintf(&S1[0],"%s","123");
if (S1=="123")
{
std::cout << "Equally" << std::endl;
}
else
{
std::cout << "Not equally" << std::endl;
}
if (!strcmp(S1.c_str(),"123"))
{
std::cout << "Equally" << std::endl;
}
else
{
std::cout << "Not equally" << std::endl;
}
std::string S2(4,' ');
sprintf(&S2[0],"%s","123");
if (S2=="123")
{
std::cout << "Equally" << std::endl;
}
else
{
std::cout << "Not equally" << std::endl;
}
if (!strcmp(S2.c_str(),"123"))
{
std::cout << "Equally" << std::endl;
}
else
{
std::cout << "Not equally" << std::endl;
}
return 0;
}
Результат (компилятор — g++ 4.3.2):
Equally
Equally
Not equally
Equally