GCC 允许自定义printf格式说明符。然而,我不知道如何“教”它接受我的字符串类作为
使用cstring的示例代码:
在GCC中,我得到了以下错误:
错误:无法通过“...”传递非平凡可复制类型的对象“class cstring”
错误:格式“%s”期望类型为“char *”的参数,但参数1的类型为“cstring” [-Werror=format]
cc1plus.exe:所有警告都被视为错误
%s
说明符。我的字符串类是char指针的简单包装器,只有一个成员变量(char * data)和没有虚函数。因此,在printf类函数中,将其作为常规char *
的替代品传递是可以的。问题是,在gcc静态分析器中会阻止我这样做,我必须显式地将其转换为const char *
以避免警告或错误。
我的cstring大致如下:
class cstring
{
cstring() : data(NULL){}
cstring(const char * str) : data(strdup(str)){}
cstring(const cstring & str) : data(strdup(str.data)){}
~cstring()
{
free(data);
}
...
const char * c_str() const
{
return data;
}
private:
char * data;
};
使用cstring的示例代码:
cstring str("my string");
printf("str: '%s'", str);
在GCC中,我得到了以下错误:
错误:无法通过“...”传递非平凡可复制类型的对象“class cstring”
错误:格式“%s”期望类型为“char *”的参数,但参数1的类型为“cstring” [-Werror=format]
cc1plus.exe:所有警告都被视为错误