如何将int和std :: string转换为char *?
我试图这样做:
int a = 1;
std::string b = "str";
char* x = a + b;
我不想要这样的事情:
std::stringstream ss;
std::string str2char;
ss << a;
str2char = ss.str() + "str";
std::vector<char> writable(str2char.size() + 1);
std::copy(str2char.begin(), str2char.end(), writable.begin());
x = &writable[0];
请如何解决这个问题。
答案 0 :(得分:3)
一种方法是使用字符串流(包括<sstream>
),将各种类型的数据输出到其中,然后将输出作为字符串或const char*
获取,如下所示:< / p>
std::stringstream ss;
int a = 1;
std::string b = "str";
ss << a << b;
std::string res(ss.str());
const char *x = res.c_str();
如果您需要转换为char*
,而不是转换为const char*
,请复制c_str
- 替换最后一行,如下所示:
char *x = new char[res.size()+1];
strcpy(x, res.c_str());
// Use x here, then...
delete[] x;
最后,您可以使用vector而不是字符串来获取可写指针而无需删除。请注意,此方法不允许您从函数返回char*
,因为其数据将与其字符的向量范围相关联。 Here is a demo of this approach
答案 1 :(得分:2)
如果您使用的是C ++ 11,则std :: to_string()是一个不错的选择:
int a = 1;
std::string b = "str";
std::string one = std::to_string(a);
std::string one_plus_b = (one + b);
const char * x = one_plus_b.c_str();
正如其他答案所指出的,'x'只能在本地范围内使用。
答案 2 :(得分:0)
int和std :: string到char *?
以下是几个单行:
char* p = strdup((std::to_string(a) + b).c_str());
...use p...
free(p);
...或者,如果您的系统提供它(我不认为它在C ++标准本身中)......
char* p = asprintf("%d%s", a, b.c_str());
...use p...
free(p);
请注意,这些是C库函数,内存分配为malloc
/ realloc
/ free
- family,不能与new
/ {{混合使用1}}(这意味着指针不应该包含在标准智能指针中,当然可以使用delete
特定或通用范围保护。)