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);

Ответы на вопрос(4)

Ваш ответ на вопрос