web-dev-qa-db-ja.com

文字配列を文字列に変換する方法

C++のstringをchar配列に変換するのは、stringのc_str関数を使用してからstrcpyを実行するのは非常に簡単です。しかし、その逆の方法は?

char arr[ ] = "This is a test";のようなchar配列を持っていて、string str = "This is a testに戻すことができます。

220
kingsmasher1

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;
337
Mysticial

別の解決策はこのようになります、

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

余分な変数を使わないようにします。

53
stackPusher

トップ投票の回答では見逃されている小さな問題があります。つまり、文字配列には0が含まれる可能性があります。上記のように単一のパラメーターを持つコンストラクターを使用すると、データが失われます。考えられる解決策は次のとおりです。

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

出力は以下のとおりです。

123
123 123

25
Yola
#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
10
Cristian