std::string
によって取得されたデータを格納するには、 を使用する必要がありますfgets()
。これを行うには、char*
戻り値を にfgets()
変換std::string
して配列に格納する必要があります。これはどのように行うことができますか?
12 に答える
std::string
このためのコンストラクタがあります:
const char *s = "Hello, World!";
std::string str(s);
この構成は、文字リストをで深くコピーし、そうs
でs
はないことnullptr
に注意してください。そうしないと、動作が定義されません。
char *のサイズがすでにわかっている場合は、代わりにこれを使用してください
char* data = ...;
int size = ...;
std::string myString(data, size);
これはstrlenを使用しません。
編集:文字列変数がすでに存在する場合は、assign()を使用します:
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
ほとんどの回答は、構築 について語ってい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
fgets() によって取得されたデータを格納するには、std::string を使用する必要があります。
fgets()
C++ をプログラミングするときに使用する理由 なぜstd::getline()
ですか?
コンストラクターを介して渡します。
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();
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;
ユーザー定義リテラルを使用する新しいメソッドについて言及したいと思います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;
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)
問題が解決しました...当たり前!
char* data;
std::string myString(data);
エリック以外の誰もこれについて言及しなかった理由はわかりませんが、このページによると、代入演算子は問題なく機能します。コンストラクター、.assign()、または .append() を使用する必要はありません。
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';