Es gibt keine Situation verwendet werden gets()
ist! Es ist immer falsch zu verwenden gets()
und es wird von C11 entfernt und aus C++ 14 entfernt.
scanf()
unterstützt keine C++ Klassen. Sie können jedoch das Ergebnis von scanf()
in eine std::string
speichern:
std::string str(100, ' ');
if (1 == scanf("%*s", &str[0], str.size())) {
// ...
}
ich über die Art und Weise nicht ganz sicher bin, dass die Pufferlänge in scanf()
und angeben, in Reihenfolge die Parameter gehen (es gibt eine Chance, dass die Parameter &str[0]
und str.size()
müssen umgekehrt werden, und ich kann eine .
in der Formatzeichenfolge fehlen). Beachten Sie, dass das Ergebnis std::string
ein abschließendes Nullzeichen enthält und seine Größe nicht geändert hat.
Natürlich würde ich einfach if (std::cin >> str) { ... }
verwenden, aber das ist eine andere Frage.
Nur neugierig, warum können Sie nicht cin oder getline? –
Auf einigen Compilern verwenden Streams eine Menge Zeit ... und ich schreibe für einen Compiler wie diesen hier. –
@Vlad: Sie sollten Ihr Programm mit 'std :: ios_base :: syc_with_stdio (false);' starten wenn das Lesen von der Standardeingabe zu langsam ist. –