我需要使用snprintf
使用std::string
替换C char缓冲区,并对它们执行相同的操作。我被禁止使用stringstream
或boost
库。
有办法吗?
const char *sz="my age is";
std::string s;
s=sz;
s+=100;
printf(" %s \n",s.c_str());
我得到输出为
my age is d
所需的输出为:
my age is 100
答案 0 :(得分:6)
这正是stringstream
被发明的那种工作,因此将它们排除在外似乎相当愚蠢。
尽管如此,是的,你可以很容易地做到这一点:
std::string s{" my age is "};
s += std::to_string(100);
std::cout << s << " \n";
如果您遇到不支持to_string
的旧编译器,您可以轻松编写自己的编译器:
#include <string>
std::string to_string(unsigned in) {
char buffer[32];
buffer[31] = '\0';
int pos = 31;
while (in) {
buffer[--pos] = in % 10 + '0';
in /= 10;
}
return std::string(buffer+pos);
}
答案 1 :(得分:3)
编辑您的代码,如下所示
const char *sz="my age is";
std::string s{sz};
s+=std::string{" 100"};
std::cout << s << '\n';
您需要将字符串连接到字符串,而不是字符串的整数。
如果年龄在不同的运行中有所不同,您可以使用sprintf
从中生成一个字符串,然后附加到字符串s
。
std::string s{" my age is "};
int age = 30;
char t[10] = {0};
sprintf(t, "%d", age);
s += std::string{t};
std::cout << s << '\n';