如何将char数组转换为字符串?

kin*_*er1 237 c++ arrays string char

将C++ string转换为char数组非常简单,使用c_strstring函数然后执行strcpy.但是,如何做到相反?

我有一个char数组,如:char arr[ ] = "This is a test";转换回: string str = "This is a test.

Mys*_*ial 354

string类有一个构造函数一个NULL结尾的C字符串:

char arr[ ] = "This is a test";

string str(arr);


//  You can also assign directly to a string.
str = "This is another string";

// or
str = arr;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅适用于**常量**以NULL结尾的C字符串.例如,`string`构造函数不能使用声明为`unsigned char*buffer`的传递参数字符串,这在字节流处理库中非常常见. (6认同)
  • 不需要任何不变的东西.如果你有一个任何char类型的字节缓冲区,你可以使用另一个构造函数:`std :: string str(buffer,buffer + size);`,但是最好坚持使用`std :: vector <unsigned char >那个案子. (4认同)
  • @ kingsmasher1:严格来说,"hello world"`*形式的字符串是*数组.如果你使用`sizeof("hello world")`它会给你数组的大小(12),而不是指针的大小(可能是4或8). (3认同)
  • 它仍然可以工作.重载的赋值运算符采用`const char*`,因此你可以传递一个字符串文字或字符数组(它衰减到那个). (2认同)
  • 虽然可能很明显:`str`在这里是_not_转换函数.它是字符串变量的名称.您可以使用任何其他变量名称(例如`string foo(arr);`).转换由std :: string的构造函数完成,该构造函数是隐式调用的. (2认同)

sta*_*her 54

另一种解决方案可能如下所示,

char arr[] = "mom";
std::cout << "hi " << std::string(arr);
Run Code Online (Sandbox Code Playgroud)

这避免了使用额外的变量.

  • 由于string()是std :: string的构造函数,因此值得一提的是,如果不使用std命名空间,则需要添加命名空间std.示例:`cout <<"test:"+ std :: string(arr);` (5认同)

Yol*_*ola 28

在最高投票的答案中错过了一个小问题.也就是说,字符数组可能包含0.如果我们将使用带有单个参数的构造函数,如上所述,我们将丢失一些数据.可能的解决方案是:

cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

123
123 123

  • 如果您使用`std :: string`作为二进制数据的容器并且无法确定该数组不包含'\ 0',那么这是一个更好的答案. (2认同)

Cri*_*ian 10

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;

int main ()
{
  char *tmp = (char *)malloc(128);
  int n=sprintf(tmp, "Hello from Chile.");

  string tmp_str = tmp;


  cout << *tmp << " : is a char array beginning with " <<n <<" chars long\n" << endl;
  cout << tmp_str << " : is a string with " <<n <<" chars long\n" << endl;

 free(tmp); 
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUT:

H : is a char array beginning with 17 chars long

Hello from Chile. :is a string with 17 chars long
Run Code Online (Sandbox Code Playgroud)

  • 好问题。我认为免费应该在那里,因为我正在使用 malloc。 (2认同)