web-dev-qa-db-ja.com

char *をstd :: stringに変換する

fgets()によって取得されたデータを格納するためにstd::stringを使用する必要があります。これを行うには、配列に格納するためにchar*の戻り値をfgets()からstd::stringに変換する必要があります。どうすればこれができますか

219
Jonathan Prior

std::stringにはこのためのコンストラクタがあります。

const char *s = "Hello, World!";
std::string str(s);

char *NULLではないことを確認してください。そうしないと、動作は未定義になります。

321
Jesse Beder

あなたがすでにchar *のサイズを知っているなら、代わりにこれを使ってください

char* data = ...;
int size = ...;
std::string myString(data, size);

これはstrlenを使いません。

編集:文字列変数がすでに存在する場合、assign()を使用してください:

std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
112
Eugene

Fgets()で取得したデータを格納するにはstd :: stringを使う必要があります。

C++をプログラミングするときにfgets()を使うのはなぜですか?なぜstd::getline()ではないのですか?

28
Paul

ほとんどの回答では、std::stringを作成しています。

すでに構築されている場合、は代入演算子を使用するだけです。

std::string oString;
char* pStr;

... // Here allocate and get character string (e.g. using fgets as you mentioned)

oString = pStr; // This is it! It copies contents from pStr to oString
21
Atul

それをコンストラクタに渡します。

const char* dat = "my string!";
std::string my_string( dat );

他の方法では、関数string.c_str()を使うことができます。

std::string my_string("testing!");
const char* dat = my_string.c_str();
13
James Thompson
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
8
Yong
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;
5
Presen

ユーザー定義のリテラルsを使用する新しい方法について述べたいと思います。これは新しいことではありませんが、C++ 14標準ライブラリに追加されたため、より一般的になるでしょう。

一般的なケースでは、ほとんど不要です。

string mystring = "your string here"s;

しかし、ワイド文字列でもautoを使うことができます。

auto mystring = U"your UTF-32 string here"s;

そしてここがそれが本当に輝くところです:

string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
3
Erik van Velzen

私はMSVC2005と闘っていて、一流の答えのようにstd::string(char*)コンストラクターを使うようにしています。私はこの変種が#4としてalways-trusted http://en.cppreference.com/w/cpp/string/basic_string/basic_string に記載されているのを見ます。 、私は古いコンパイラでさえこれを提供していると思います。

このコンストラクタが引数としての(unsigned char*)と絶対に一致することを絶対に拒否することを理解するのに私は長い時間がかかりました! std::string引数の型と一致しないことに関するこれらの不可解なエラーメッセージを得ました。引数をstd::string((char*)ucharPtr)でキャストするだけで私の問題は解決しました。

0
user1564286

エリック以外に誰もこれに言及しなかったのかわからないが、 this page によれば、代入演算子はうまく機能する。コンストラクタ、.assign()、または.append()を使用する必要はありません。

std::string mystring;
mystring = "This is a test!";   // Assign C string to std:string directly
std::cout << mystring << '\n';
0
Vern Jensen
char* data;
std::string myString(data);
0
Daniel A. White