我有以下代码:
char szBuf[256] = "";
std::string szFmt = "You have recieved %s item."
string szName = "Fork";
snprintf(szBuf, sizeof(szBuf), szFmt.c_str(), szName);
我正在尝试将 szFmt 与 szBuf 结合起来,同时将 szFmt 与 szName 结合起来。但是,当我在 win10 中执行此代码时,我得到了这样一个奇怪的输出:
You've received the LÃý item.
当我尝试在 OSX El Capitan 中执行代码时,出现以下错误
cannot pass object of non-trivial type 'string' throgh variadic function; call will about at runtime
那么问题是什么,我该如何解决呢?
注意:我检查了this问题,但在答案中,他们直接传递“Fork”,这在我身上也有效;但是当我将它作为 szName 传递时它不起作用。
最佳答案
评论中提到了更好的解决方案 (ostringstream
),但为了进一步的教育值(value),我将在这里解决眼前的问题。
Varargs(printf
系列函数可以接受可变数量参数的机制)不像其他类型那样严格检查类型。在这种情况下,snprintf
需要一个 char*
到字符串,但是您传递的 szName
是一个 string
对象。因此,您还需要对其调用 .c_str()
:
snprintf(szBuf, sizeof(szBuf), szFmt.c_str(), szName.c_str());
关于c++ - 将字符串写入 char,同时将参数传递给字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45839171/