【发布时间】:2012-12-02 23:49:27
【问题描述】:
GCC allows customization of printf specifiers. 但是,我不知道如何“教”它接受 %s 说明符的字符串类。我的字符串类是对 char 指针的简单包装,并且只有一个成员变量(char * 数据)并且没有虚函数。因此,可以按原样将其传递给类似 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:所有警告都被视为错误
【问题讨论】: