【问题标题】:Format string in C++ when calling function [closed]调用函数时在 C++ 中格式化字符串 [关闭]
【发布时间】:2014-06-19 18:20:39
【问题描述】:

在c#中我们可以使用:

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

如何在 C++ 中做到这一点?

谢谢大家

【问题讨论】:

  • 您在下面的评论说:我正在尝试调用它:Send("Some text" + var) When var is char*.那么上面的i 应该是char * 吗?您是否要连接两个字符串?或者将整数类型转换为字符串并将这两者连接在一起?鉴于您选择的变量命名,大多数人会假设后者。
  • 您应该添加要调用的函数的原型,以及要连接到问题的值的类型。

标签: c++


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

让我们首先考虑表达式

"This is test number: " + i

你想得到一些新的字符串,它将包含运算符 + 的两个操作数。所以这个字符串必须在内存中动态分配。为字符串动态分配内存的唯一标准 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];

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

【讨论】:

  • 谢谢。效果很好。也谢谢大家。
  • @Deduplicator 他可能不会这样做,因为参数的类型是 char * 而 c_str() 的返回类型是 const char *。
  • @Deduplicator 我再说一遍,c_str() 的返回类型是 const char * 而参数的类型是 char *。您建议使用未定义的行为。
【解决方案3】:

实际上,如果i 是一个整数,那么 string + i 将产生一个移动了那么多元素的数组(假设这将基地址保持在界限内,否则会产生垃圾数据)。

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

因此,如果想连接字符串,您可以使用上述解决方案,使用 std::string:

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

编辑:既然您评论说i 不是int,所以这可能不再有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多