Non c'è situazione in cui gets()
deve essere utilizzato! È sempre errato per utilizzare gets()
e viene rimosso da C11 e rimosso da C++ 14.
scanf()
non supportano alcuna classe C++. Tuttavia, è possibile memorizzare il risultato da scanf()
in un std::string
:
std::string str(100, ' ');
if (1 == scanf("%*s", &str[0], str.size())) {
// ...
}
io non sono del tutto sicuro sul modo di specificare che buffer di lunghezza in scanf()
e ordine in cui i parametri vanno (c'è una possibilità che la i parametri &str[0]
e str.size()
devono essere invertiti e potrebbe mancare un .
nella stringa di formato). Si noti che il risultante std::string
conterrà un carattere null terminante e non avrà modificato la sua dimensione.
Ovviamente, vorrei solo usare if (std::cin >> str) { ... }
ma questa è una domanda diversa.
fonte
2013-11-23 18:16:47
Solo curioso, perché non puoi usare cin o getline? –
Su alcuni compilatori che usano gli stream ci vuole un sacco di tempo ... e sto codificando per un compilatore come quello qui .. –
@Vlad: dovresti iniziare il tuo programma con 'std :: ios_base :: syc_with_stdio (false);' se la lettura dallo standard input è troppo lenta. –