我有以下代码:
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中执行此代码时,我得到了一个奇怪的输出:
当我尝试在OSX El Capitan中执行代码时,出现以下错误
那么问题是什么,我该如何解决呢?
注意:我检查了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/