I have my own class that represents a custom string class. I'm using VS2012RC. I have overloaded some operators of my class CustomString.
Here's some code:
CustomString::CustomString(string setstr)
{
str = setstr;
}
CustomString::operator const char *()
{
return (this->str.c_str());
}
CustomString &CustomString::operator = (char *setstr)
{
str = setstr;
return *this;
}
I can define my object and use it like this:
CustomString str = "Test string";
and i can print the result as:
printf(str);
printf((string)(str).c_str());
printf((string)(str).data());
printf("%s
",(string)(str).c_str());
printf("%s
",(string)(str).data());
And there is not any error.
But if i use it like this:
printf("%s
", str);
There is an exception in msvcr110d.dll (error in memory access)
Why printf(str) is ok, but printf("%s ",str) is not ok?
How can i modify my code to use printf("%s ",str) ?
...
After hours of googling, I found that explict cast (string), static_cast (str) and _str() method are add a null-terminated chars: '';
i've modified my code as:
printf("%s
",str + '');
and it's worked!
Is there any way to modify my custom constructor to add a null-terminated string and pass a correct value with null-terminated chars to get working the following code:
printf("%s
",str);
See Question&Answers more detail:os