如何将int和std :: string转换为char *?

时间:2014-03-29 02:13:25

标签: c++

如何将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];

请如何解决这个问题。

3 个答案:

答案 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();

Demo on ideone.

如果您需要转换为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特定或通用范围保护。)