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

How to convert int and std::string to char*?

本文关键字:string 转换 char std int      更新时间:2023-10-16

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

I'm try to do this:

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];

如何处理?

一种方法是使用字符串流(包括<sstream>),将各种类型的数据输出到其中,然后将输出作为字符串或const char*获取,如下所示:

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而不是string来获得可写指针,而无需进行删除操作。注意,这种方法不允许您从函数返回char*,因为它的数据将与具有其字符的向量的作用域绑定在一起。下面是该方法的演示:

如果您正在使用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'只能在局部作用域中使用。

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 -家族,不能与new/delete混合(这意味着指针不应该包装在标准智能指针中,尽管当然可以使用free特定的或通用的作用域保护)。