Ce qui rend une bibliothèque C standard fonction dangereux, et quelle est l'alternative?

Lors de l'apprentissage de C I viennent régulièrement dans toutes les ressources qui recommandent de certaines fonctions (par exemple,gets()) ne doivent jamais être utilisés, car ils sont difficiles ou impossibles à utiliser en toute sécurité.

Si la bibliothèque C standard contient un certain nombre de ces de "ne jamais utiliser les fonctions d', il semble nécessaire d'apprendre une liste d'entre eux, ce qui les rend dangereux, et que faire à la place.

Jusqu'à présent, j'ai appris que les fonctions dont:

  • Ne peut être empêché de l'écrasement de la mémoire
  • Ne sont pas garantis à zéro à la fin d'une chaîne
  • Maintenir interne de l'état entre les appels

sont communément considérés comme étant dangereux à utiliser. S'il existe une liste de fonctions qui présentent ces comportements? Il existe d'autres types de fonctions, qui sont impossibles à utiliser en toute sécurité?

  • La liste complète de securecoding : securecoding.cert.org/confluence/display/seccode/...
  • La Question est en cours de discussion sur meta et peut attirer l'attention inhabituelle meta.stackoverflow.com/questions/385216/...
  • Il y a des énergumènes comme setjmp() et longjmp() qui n'ont pas été mentionnés; ils sont à la problématique en général, en particulier pour l'origine l'utilisation prévue de saut entre la procédure en cours et une autre procédure encore sur la pile d'appel au-dessus de la procédure en cours. Ils sont difficiles à utiliser, vraiment bien. Traitement du Signal peut également être problématique. Le standard C règles sont très restrictives; POSIX règles sont plus sensibles.
  • Cela dépend beaucoup du contexte. MISRA C des directives de codage (à l'origine pour les systèmes embarqués dans les voitures — MISRA est le Moteur de l'Industrie de la Fiabilité des Logiciels de l'Association) s'opposent à l'utilisation de malloc() et les amis, et les hors la loi de la variable de tableaux de longueur, et la flexibilité des membres du groupe. Il y a des raisons pour le faire dans le cadre de laquelle les lignes directrices ont été rédigées. Ces interdits ne sont pas nécessairement utiles ailleurs.