2013-11-23 8 views
17

タイトルによると、scanfでC++文字列を読み取る方法があるのか​​不思議です。scanfでC++文字列を読み取る

私は、各文字を読み、当然の文字列に挿入することができます知っているが、私は何かしたいと思います:

string a; 
scanf("%SOMETHING", &a); 

gets()も動作しません。

ありがとうございます!

+7

ちょっと不思議なことに、なぜcinやgetlineを使用できないのですか? –

+0

ストリームを使用するコンパイラの中には、時間がかかるものがあります。私はここのようなコンパイラをコーディングしています。 –

+1

@Vlad:プログラムを 'std :: ios_base :: syc_with_stdio(false);で始めるべきです。標準入力からの読み取りが遅すぎる場合 –

答えて

13

作業することができます! いつもgets()で間違っていて、C11から削除され、C++ 14から削除されています。

scanf()すべてのC++クラスをサポートしていません。ただし、std::stringscanf()から結果を格納することができます

std::string str(100, ' '); 
if (1 == scanf("%*s", &str[0], str.size())) { 
    // ... 
} 

私はscanf()にそのバッファな長さを指定する方法についてやパラメータを注文した、全くわからない(その可能性がある行きますパラメータ&str[0]str.size()を逆にする必要があり、フォーマット文字列に.がない可能性があります)。結果のstd::stringには終端ヌル文字が含まれ、サイズは変更されません。

もちろん、私はif (std::cin >> str) { ... }を使用しますが、これは別の質問です。

+0

あなたのコードはコンパイルされていますか?私はコンパイルエラーをC++ 98とC++ 11の両方を使って取得します。 –

+0

@Vlad:あなたは ''と ''を含むと仮定してコードをコンパイルし、関数内に座っていると思います。どのようなエラーメッセージが表示されますか? –

+0

@Vlad:OK、見てます: 'std :: string'はちょうどサイズを取るコンストラクタを宣言していないようです。 'std :: string str(100、 '');を使ってこの問題を修正します。 –

20

これはgets()が使用されるの下に何も状況はありません

char tmp[101]; 
scanf("%100s", tmp); 
string a= tmp; 
+3

私はchar []でC++の文字列を初期化できることを知りませんでした。 :) –

-3
string temp; 
scanf("%s",&temp.c_str()); 

私はうまくいきたいと思います!

+1

これは良い考えではありません。'scanf'は非constポインタがcharに期待しています。 – dreamlax

関連する問題