タイトルによると、scanfでC++文字列を読み取る方法があるのか不思議です。scanfでC++文字列を読み取る
私は、各文字を読み、当然の文字列に挿入することができます知っているが、私は何かしたいと思います:
string a;
scanf("%SOMETHING", &a);
gets()
も動作しません。
ありがとうございます!
タイトルによると、scanfでC++文字列を読み取る方法があるのか不思議です。scanfでC++文字列を読み取る
私は、各文字を読み、当然の文字列に挿入することができます知っているが、私は何かしたいと思います:
string a;
scanf("%SOMETHING", &a);
gets()
も動作しません。
ありがとうございます!
作業することができます! いつもはgets()
で間違っていて、C11から削除され、C++ 14から削除されています。
scanf()
すべてのC++クラスをサポートしていません。ただし、std::string
にscanf()
から結果を格納することができます
std::string str(100, ' ');
if (1 == scanf("%*s", &str[0], str.size())) {
// ...
}
私はscanf()
にそのバッファな長さを指定する方法についてやパラメータを注文した、全くわからない(その可能性がある行きますパラメータ&str[0]
とstr.size()
を逆にする必要があり、フォーマット文字列に.
がない可能性があります)。結果のstd::string
には終端ヌル文字が含まれ、サイズは変更されません。
もちろん、私はif (std::cin >> str) { ... }
を使用しますが、これは別の質問です。
あなたのコードはコンパイルされていますか?私はコンパイルエラーをC++ 98とC++ 11の両方を使って取得します。 –
@Vlad:あなたは '
@Vlad:OK、見てます: 'std :: string'はちょうどサイズを取るコンストラクタを宣言していないようです。 'std :: string str(100、 '');を使ってこの問題を修正します。 –
これはgets()
が使用されるの下に何も状況はありません
char tmp[101];
scanf("%100s", tmp);
string a= tmp;
私はchar []でC++の文字列を初期化できることを知りませんでした。 :) –
string temp;
scanf("%s",&temp.c_str());
私はうまくいきたいと思います!
これは良い考えではありません。'scanf'は非constポインタがcharに期待しています。 – dreamlax
ちょっと不思議なことに、なぜcinやgetlineを使用できないのですか? –
ストリームを使用するコンパイラの中には、時間がかかるものがあります。私はここのようなコンパイラをコーディングしています。 –
@Vlad:プログラムを 'std :: ios_base :: syc_with_stdio(false);で始めるべきです。標準入力からの読み取りが遅すぎる場合 –