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


254

string使用c_strstring函数然后将C ++ 转换为char数组非常简单strcpy。但是,该怎么做相反呢?

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

Answers:


369

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;

2
无论哪种方式,它仍然可以工作。重载的赋值运算符采用const char*,因此您可以将其传递给字符串文字或char数组(衰减为该字符串)。
Mysticial

3
@ kingsmasher1:严格来说,表单"hello world" 中的字符串数组。如果使用sizeof("hello world")它,将为您提供数组的大小(即12),而不是指针的大小(可能为4或8)。
dreamlax 2012年

7
请注意,这仅适用于以NULL结尾的常量 C字符串。该string构造函数将不会工作,例如,一个传递的参数字符串作为申报unsigned char * buffer,事中的字节流处理库非常普遍。
CXJ 2014年

4
不需要任何常数。如果您具有任何char类型的字节缓冲区,则可以使用其他构造函数:std::string str(buffer, buffer+size);,但是std::vector<unsigned char>在这种情况下最好使用a 。
R. Martinho Fernandes 2014年

2
尽管可能很明显:str这里不是转换函数。它是字符串变量的名称。您可以使用任何其他变量名称(例如string foo(arr);)。转换由隐式调用的std :: string的构造函数完成。
Christopher K.

55

另一个解决方案可能看起来像这样,

char arr[] = "mom";
std::cout << "hi " << std::string(arr);

避免使用额外的变量。


您能否在答案中指出这与我的Misticial答案有何不同?
Maarten Bodewes 2014年

@owlstead,请参阅编辑。我只是简单地回答一下,因为它是我第一次遇到该页面寻找答案时所希望看到的。如果有人和我一样愚蠢,但在浏览第一个答案时却无法建立联系,希望我的回答对他们有​​所帮助。
stackPusher 2014年

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

1
@ChristopherK。我将其排除在外,因为评分最高的答案也是如此。我的回答是对该回答的补充,因此我保持相同的假设。希望任何不理解的人都会看到您的评论
stackPusher 2014年

str是变量名还是键,我可以在这里使用string aString(someChar);吗?
Driss Bounouar,2014年

31

投票最多的答案中遗漏了一个小问题。也就是说,字符数组可能包含0。如果我们将构造函数与上述单个参数一起使用,则会丢失一些数据。可能的解决方案是:

cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;

输出为:

123
123 123


2
如果您要std::string用作二进制数据的容器,并且不能确定数组不包含“ \ 0”,则这是一个更好的答案。
阿西尔·基西

11
#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;
}

出:

H : is a char array beginning with 17 chars long

Hello from Chile. :is a string with 17 chars long

免费(tmp)在哪里?字符串可以解决这个问题吗?
huseyin tugrul buyukisik

1
好问题。我认为应该有免费的,因为我正在使用malloc。
克里斯蒂安
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.