我有自己的代表自定义字符串类的类。我正在使用 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)?
...
经过数小时的谷歌搜索,我发现显式转换 (string)、static_cast (str) 和 _str() 方法添加了一个以空字符结尾的字符:'\0';
我已将我的代码修改为:
printf("%s\n",str + '\0');
它成功了!
有什么方法可以修改我的自定义构造函数以添加一个以空字符结尾的字符串并使用以空字符结尾的字符传递一个正确的值来运行以下代码:
printf("%s\n",str);