【发布时间】:2015-06-08 15:21:09
【问题描述】:
我正在使用 VisualStudio 2013,我的 c++ 类的以下代码遇到了一些问题。我似乎不知道下一步该做什么。我正在尝试创建一个将格式化字符串的函数。它将采用这样的字符串
write("The number {0} is smaller than {1}", -3, 8);
并让它输出格式正确。参数将始终是双精度数。所以它会像这样输出到控制台:
The number -3 is smaller than 8.
我的问题是我想我对变量参数的理解不够,或者我只是在下面的代码中做错了。每次我尝试设置类似
userString[i] = var_arg(userString, arguments);
我得到一个溢出错误。任何指导将不胜感激。
#include <iostream>
#include <string>
#include <cstdarg>
using namespace std;
//Prototype
string write(string userString...);
void main()
{
write("This is {0} a string.{1}", 5);
system("pause");
}
string write(string userString...)
{
char target1 = '{';
char target2 = '}';
va_list arguments;
va_start(arguments, userString);
for (int i = 0; i < userString.size(); ++i)
{
if (userString[i] == target1 & userString[i + 2] == target2)
{
//Need help here...
}
}
va_end(arguments);
return userString;
}
【问题讨论】:
-
如果你需要这个功能(这不是个人的编码练习)你几乎发明了
boost::format。 -
您的代码具有未定义的行为,因为
userString不是由默认参数提升产生的类型。 -
如果您包括您是否使用 C++03、C++11 等,这将对这个问题有所帮助。
-
@user2610654:您的示例中的参数是不是双精度数,这是问题的很大一部分。
标签: c++ string variables arguments