fgets()
によって取得されたデータを格納するためにstd::string
を使用する必要があります。これを行うには、配列に格納するためにchar*
の戻り値をfgets()
からstd::string
に変換する必要があります。どうすればこれができますか
std::string
にはこのためのコンストラクタがあります。
const char *s = "Hello, World!";
std::string str(s);
char *
がNULL
ではないことを確認してください。そうしないと、動作は未定義になります。
あなたがすでにchar *のサイズを知っているなら、代わりにこれを使ってください
char* data = ...;
int size = ...;
std::string myString(data, size);
これはstrlenを使いません。
編集:文字列変数がすでに存在する場合、assign()を使用してください:
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
Fgets()で取得したデータを格納するにはstd :: stringを使う必要があります。
C++をプログラミングするときにfgets()
を使うのはなぜですか?なぜstd::getline()
ではないのですか?
ほとんどの回答では、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
それをコンストラクタに渡します。
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;
私は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)
でキャストするだけで私の問題は解決しました。
エリック以外に誰もこれに言及しなかったのかわからないが、 this page によれば、代入演算子はうまく機能する。コンストラクタ、.assign()、または.append()を使用する必要はありません。
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
char* data;
std::string myString(data);