317

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

4

12 に答える 12

461

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

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

この構成は、文字リストをで深くコピーし、そうssはないことnullptrに注意してください。そうしないと、動作が定義されません。

于 2009-07-28T17:57:34.587 に答える
158

char *のサイズがすでにわかっている場合は、代わりにこれを使用してください

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

これはstrlenを使用しません。

編集:文字列変数がすでに存在する場合は、assign()を使用します:

std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
于 2009-07-28T17:59:21.090 に答える
47

ほとんどの回答は、構築 について語ってい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
于 2015-10-24T12:02:41.103 に答える
32

fgets() によって取得されたデータを格納するには、std::string を使用する必要があります。

fgets()C++ をプログラミングするときに使用する理由 なぜstd::getline()ですか?

于 2009-07-28T18:12:06.010 に答える
21

コンストラクターを介して渡します。

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();
于 2009-07-28T17:59:12.277 に答える
12
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
于 2013-04-03T10:27:31.320 に答える
9
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;
于 2014-06-10T09:26:03.473 に答える
6

ユーザー定義リテラルを使用する新しいメソッドについて言及したいと思います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;
于 2013-12-24T00:19:54.620 に答える
5

std::string(char*)最高評価の回答と同じように、MSVC2005でコンストラクターを使用するのに苦労しています。この亜種は、常に信頼できるhttp://en.cppreference.com/w/cpp/string/basic_string/basic_stringで #4 としてリストされているので、古いコンパイラでさえこれを提供していると思います。

このコンストラクター absolute が(unsigned char*)引数としての一致を拒否していることに気付くのに、私は長い時間がかかりました! 引数の型との一致の失敗に関するこれらの理解できないエラー メッセージが表示されましstd::stringたが、これは間違いなく私が目指していたものではありませんでした。引数をキャストするだけでstd::string((char*)ucharPtr)問題が解決しました...当たり前!

于 2015-07-13T15:05:49.243 に答える
1
char* data;
std::string myString(data);
于 2009-07-28T17:56:57.583 に答える
1

エリック以外の誰もこれについて言及しなかった理由はわかりませんが、このページによると、代入演算子は問題なく機能します。コンストラクター、.assign()、または .append() を使用する必要はありません。

std::string mystring;
mystring = "This is a test!";   // Assign C string to std:string directly
std::cout << mystring << '\n';
于 2014-05-20T02:14:09.433 に答える