web-dev-qa-db-fra.com

Lire la chaîne C ++ avec scanf

Comme le titre l'indique, je suis curieux de savoir s'il existe un moyen de lire une chaîne C++ avec scanf.

Je sais que je peux lire chaque caractère et l'insérer dans la chaîne méritée, mais je voudrais quelque chose comme:

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

gets() ne fonctionne pas non plus.

Merci d'avance!

20
Vlad Tarniceru

Il n'y a aucune situation dans laquelle gets() doit être utilisée! Il est toujours incorrect d'utiliser gets() et il est supprimé de C11 et supprimé de C++ 14.

scanf() ne prend en charge aucune classe C++. Cependant, vous pouvez stocker le résultat de scanf() dans un std::string:

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

Je ne suis pas tout à fait sûr de la façon de spécifier cette longueur de tampon dans scanf() et dans quel ordre les paramètres vont (il y a une chance que les paramètres &str[0] Et str.size() doit être inversé et il me manque peut-être un . dans la chaîne de format). Notez que le std::string Résultant contiendra un caractère nul de fin et il n'aura pas changé sa taille.

Bien sûr, j'utiliserais simplement if (std::cin >> str) { ... } mais c'est une question différente.

17
Dietmar Kühl

ça peut marcher

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