scanf(“%[^\n]s”,a) vs obtient(a)

On m'a dit que scanf ne doit pas être utilisé lorsque l'utilisateur entre une chaîne de caractères. Au lieu de cela, optez pour gets() par la plupart des experts et les utilisateurs sur StackOverflow. Je n'ai jamais demandé sur StackOverflow pourquoi on ne devrait pas utiliser scanf plus obtient pour les chaînes de caractères. Ce n'est pas la question mais la réponse à cette question est grandement apprécié.

Arrive maintenant à la question. Je suis tombé sur ce type de code -

scanf("%[^\n]s",a); 

Ce lit une chaîne de caractères jusqu'à ce que les entrées de l'utilisateur un caractère de nouvelle ligne, en considérant les espaces en blanc également comme une chaîne de caractères.

Est-il un problème si j'utilise

scanf("%[^\n]s",a);

au lieu de?

Est devient de plus en plus optimisé que la fonction scanf comme il semble, est purement dédiés à la gestion des chaînes de caractères. S'il vous plaît laissez-moi savoir à ce sujet.

Mise à jour

Cette lien m'a aidé à mieux le comprendre.

gets n'est pas une très bonne idée, soit à cause du risque de dépassements de la mémoire tampon. Utilisation fgets.
Merci, mais à ma connaissance fgets est pour la manipulation de fichiers de droite? Je viens d'apprendre le f indique le mode fichier, alors pourquoi est-ce qu'ils utilisé obtient et fgets()
Vous pouvez lire l'entrée standard avec fgets en passant stdin comme le dernier paramètre. L'avantage de l'utilisation de fgets sur gets est qu'avec fgets, vous pouvez spécifier la longueur de votre tampon, la prévention fgets à partir de la lecture de beaucoup de données. gets est un risque pour la sécurité, et ils n'ont jamais fixe pour des raisons de compatibilité descendante.
Tout f* fonction (par exemple, fscanf) peut être utilisé sur le stdin descripteur de fichier pour émuler le non-f* version (dans ce cas, fscanf(stdin, ...) est exactement équivalente à scanf(...)).
Non, la lecture de stdin toujours attendre un retour à la ligne. Toutefois, si l'utilisateur entre des personnages de plus fgets demandé, elles sont stockées dans un tampon dans le cadre de la FILE * de la structure, et de ne pas être accessible que par vous. Un deuxième appel à fgets volonté, au lieu de lire plus de commentaires des utilisateurs, de retour de plus de données à partir de la mémoire tampon, jusqu'à ce qu'elle est vide. (fgetc les autres caractères d'un-à-un-temps les fonctions de faire exactement la même chose.)

OriginalL'auteur niko | 2011-11-18