在c#中我们可以使用:
function_name("This is test number: " + i);
如何在c ++中完成?
谢谢你们
答案 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];
并以与上面所示相同的方式调用该函数。