printf e classe customizada

Eu tenho minha própria classe que representa uma classe de string personalizada. Estou usando o VS2012RC. Eu sobrecarreguei alguns operadores da minha classe CustomString.

Aqui está um código:

CustomString::CustomString(string setstr)
{           
    str = setstr;
}

CustomString::operator const char *()
{   
    return (this->str.c_str());
}

CustomString &CustomString::operator = (char *setstr)
{
    str = setstr;
    return *this;
}

Eu posso definir meu objeto e usá-lo assim:

CustomString str = "Test string";

e eu posso imprimir o resultado como:

printf(str);

printf((string)(str).c_str());

printf((string)(str).data());

printf("%s\n",(string)(str).c_str());

printf("%s\n",(string)(str).data());

E não há erro algum.

Mas se eu usar assim:

printf("%s\n", str);

Há uma exceção em msvcr110d.dll (erro no acesso à memória)

Por quêprintf (str) está ok, masprintf ("% s \ n", str) não está bem?

Como posso modificar meu código para usarprintf ("% s \ n", str) ?

...

Depois de horas pesquisando, descobri que os métodos explict cast (string), static_cast (str) e _str () adicionam um caractere terminado em nulo: '\ 0';

Eu modifiquei meu código como:

printf("%s\n",str + '\0');

e funcionou!

Existe alguma maneira de modificar meu construtor personalizado para adicionar uma seqüência terminada com nulo e passar um valor correto com caracteres terminados com nulo para obter o seguinte código:

printf("%s\n",str);

questionAnswers(4)

yourAnswerToTheQuestion