调用函数时在C ++中格式化字符串

时间:2014-06-19 18:20:39

标签: c++

在c#中我们可以使用:

function_name("This is test number: " + i);

如何在c ++中完成?

谢谢你们

3 个答案:

答案 0 :(得分:5)

假设function_name采用std::string参数,并且您支持C ++ 11,则可以使用

function_name("This is test number: " + std::to_string(i));

答案 1 :(得分:0)

实际上,如果i是一个整数,那么字符串+ i将产生一个由多个元素移位的数组(假设这会将基地址保留在边界中,否则会生成垃圾数据)。

因此,如果是i=4,那么您的字符串将作为" is test number: "传递,删除"This"

因此,如果想要连接字符串,可以使用std :: string:

使用上述解决方案
function_name("This is test number: " + std::to_string(i));

编辑:由于您评论i不是int所以这可能不再有效。

答案 2 :(得分:0)

让我们首先考虑表达式

"This is test number: " + i

你想得到一些新的字符串,它将包含operator +的两个操作数。所以这个字符串必须在内存中动态分配。为字符串动态分配内存的唯一标准C ++类是std::string。但是它没有operator +,其中一个操作数具有整数类型。所以对象i必须明确地转换为std :: string类型的对象。可以使用标准函数std::to_string来完成。在这种情况下,调用看起来像

function_name("This is test number: " + std::to_string( i ) );

但是,如果函数只接受char *类型的参数,那么就不能使用类std::string

那你需要什么?

正如我所提到的,你必须在调用函数之前分配字符数组。假设您定义了这样一个数组,它可以容纳字符串文字和存储在i。

中的数字
char s[SOME_ENOUGH_SIZE];

什么时候可以写

std::sprintf( s, "&s %i", "This is test number: ", i );

function_name( s );

您也可以动态分配数组。例如

char *s = new char[SOME_ENOUGH_SIZE];

并以与上面所示相同的方式调用该函数。