void displayinfo(string &filename)
{
printf("%s% 38s\n", "Filename:", filename);
...
警告:“std::string”类型的非 POD 对象作为变量参数传递给函数“std::printf(const char*, ...)”。
没有任何在线解释该警告的含义。
我如何让 printf 写这个(假设文件名 = test.txt):
文件名:(右对齐文件名)test.txt
提前致谢。
解释很简单:只有 POD(普通旧数据结构)可以作为参数传递给可变参数函数(虽然不是可变参数函数模板,只是使用省略号的简单可变参数函数)。
std::string
不是 POD,但您可以执行以下操作:
printf("%s% 38s\n", "Filename:", filename.c_str());
// ^^^^^^^^
c_str()
成员函数返回一个封装的const char*
C 字符串。
printf
,当与%s
格式说明符一起使用时,需要一个指向 char 的指针。您可以std::string
通过以下c_str()
方法获得:
printf("%s% 38s\n", "Filename:", filename.c_str());
顺便说一句,请注意,如果您不打算修改或复制输入字符串,则应通过const
引用传递:
void displayinfo(const string& filename) { .... }
我严重怀疑网络会保持沉默。也许您查看了错误的地方或使用了 nad keyworrs。
基本规则很简单,将非 POD 作为 ... 参数传递是未定义的行为。除非您的实现定义了一些行为并且它与您的任务相匹配,否则不要这样做。
特别是对于 printf 系列,格式字符串需要特定类型才能通过,即使通过 POD 有效,您也打破了这一点。