3

私はC++でプログラミングしています。

この質問と同じくらい基本的なことですが、私はどこにも答えを見つけることができないようです。だからここに問題があります:

Cスタイルの文字列を作成したいのですが、整数変数iを文字列に入れたいです。当然、私はストリームを使用しました。

stringstream foo;
foo
                << "blah blah blah blah... i = " 
                << i
                << " blah blah... ";

ただし、関数に渡すCスタイルの文字列を取得する必要があります(foo.str()はstd :: stringを返します)。したがって、これは技術的には3つの部分からなる質問です-

1)std :: stringをCスタイルの文字列に変換するにはどうすればよいですか?

2)文字列ストリームからCスタイルの文字列を取得する方法はありますか?

3)Cスタイルの文字列を直接(stringstreamsを使用せずに)使用して、整数変数を含む文字列を作成する方法はありますか?

4

3 に答える 3

13

1) std::string を C スタイルの文字列に変換するにはどうすればよいですか?

を呼び出すだけstring.c_str()char const*. 変更可能な_C-style_ 文字列が必要な場合は、コピーを作成してください。の非 const関数を呼び出さない限り、返されたC 文字列は有効です。string

2) stringstream から C スタイルの文字列を取得する方法はありますか?

ありますstrstream.str().c_str()。返されたC 文字列は、それを含む式の終わりまでのみ有効です。つまり、関数の引数として使用することは有効ですが、後でアクセスするために変数に格納することはできません。

3) C スタイルの文字列を (文字列ストリームを使用せずに) 直接使用して、整数変数を含む文字列を作成する方法はありますか?

Cの使い方などがありsprintfます。

于 2012-06-09T04:55:58.793 に答える
3

途中まで来ました。あなたが必要foo.str().c_str();

  1. your_string.c-str()-- しかし、これは実際には変換しません。文字列と同じ内容を (一時的に) 保持するバッファーへのポインターを提供するだけです。
  2. はい、上記のfoo.str().c_str().
  3. はい、しかし、一般的にはそのようなことは避けたほうがよいでしょう。基本的に、「本物のプログラマーはどの言語でも C を書ける」という罠に陥ります。
于 2012-06-09T04:58:30.443 に答える
-1
  1. これは本当に簡単です

    #include <afx.h>
    std::string s("Hello");
    CString cs(s.c_str());
    
  2. 番号

  3. sprintfを使用して C スタイルの文字列をフォーマットできます

于 2012-06-09T04:57:27.617 に答える