我有以下代码:

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/

10-11 21:51