printf и пользовательский класс
У меня есть свой собственный класс, который представляет пользовательский класс строки. Я использую VS2012RC. Я перегружен некоторыми операторами моего класса CustomString.
Вот некоторый код:
CustomString::CustomString(string setstr)
{
str = setstr;
}
CustomString::operator const char *()
{
return (this->str.c_str());
}
CustomString &CustomString::operator = (char *setstr)
{
str = setstr;
return *this;
}
Я могу определить свой объект и использовать его так:
CustomString str = "Test string";
и я могу напечатать результат как:
printf(str);
printf((string)(str).c_str());
printf((string)(str).data());
printf("%s\n",(string)(str).c_str());
printf("%s\n",(string)(str).data());
И нет никаких ошибок.
Но если я использую это так:
printf("%s\n", str);
В msvcr110d.dll есть исключение (ошибка в доступе к памяти)
Зачемprintf(str) в порядке, ноprintf("%s\n",str) не в порядке?
Как я могу изменить свой код для использованияprintf("%s\n",str) ?
...
После нескольких часов поисков в Google, я обнаружил, что методы explict cast (string), static_cast (str) и _str () добавляют символы с нулем в конце: & apos; \ 0 & apos ;;
я изменил свой код как:
printf("%s\n",str + '\0');
и это сработало!
Есть ли способ изменить мой пользовательский конструктор, чтобы добавить строку с нулевым символом в конце и передать правильное значение с символами с нулевым символом в конце, чтобы получить следующий код:
printf("%s\n",str);