c++ - 将字符串写入 char,同时将参数传递给字符串

标签 c++ string

我有以下代码:

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/

相关文章:

c++ - mpi hello world 上的 valgrind 段错误

c++ - 在 Visual Studio 2012 中,如何将资源文件 (.rc) 与 c++ dll 链接起来

C++ 与动态内存分配混淆

java - 将 int 转换为 string 时对齐 Decimal

javascript - 获取字符串的一部分到变量中

c# - 用单个值替换所有出现的字符串(在数组中)

char* 或 char ?.我不明白这里的声明

c++ - 给定一对 (lat,long) 和偏移纬度找到经度

c++ - C 和 C++ 之间的字符串字面量差异

C++11 标准——从哪里得到它?