質問

私はstd::stringによって取得したデータを保存するためにfgets()を使用する必要があります。これを行うには、私は、配列に格納する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関数を使用していません。

編集:文字列変数が既に存在する場合、(割り当てを使用):

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

私はfgetsを取得したことにより、データを格納するためのstd ::文字列を使用する必要があります()。

なぜあなたは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 mystring = U"your UTF-32 string here"s;
それは本当に輝いここで、

そして、ここでは、次のとおりです。

string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
char* data;
std::string myString(data);

私はちょうど一流の答えのようstd::string(char*)コンストラクタを使用するMSVC2005で苦労してきました。私は常に信頼に#4として記載されているこのバリアントを見たようます。http:// EN。 のcppreference.com/w/cpp/string/basic_string/basic_string、私も古いコンパイラはこれを提供しています把握ます。

これは、このコンストラクタは絶対引数として(unsigned char*)と一致することを拒否することを実現するためにあまりにも長い間、私を取りました!私は私が目指したものは間違いなくありませんでしたstd::stringの引数の型と一致するように、失敗に関するこれらの不可解なエラーメッセージを得ました。ただ、std::string((char*)ucharPtr)で引数をキャストすることは当たり前...私の問題を解決しました!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top