web-dev-qa-db-fra.com

Différence entre 'strcpy' et 'strcpy_s'?

Lorsque j'essaie d'utiliser strcpy pour copier une chaîne, cela m'a donné une erreur de compilation.

error C4996 'strcpy': This function or variable may be unsafe.

Pensez à utiliser strcpy_s au lieu. Pour désactiver la dépréciation, utilisez _CRT_SECURE_NO_WARNINGS. Voir l'aide en ligne pour plus de détails.

Quelle est la différence entre strcpy et strcpy_s?

17
Bluebaby

strcpy est une fonction dangereuse. Lorsque vous essayez de copier une chaîne à l'aide de strcpy (), dans un tampon qui n'est pas assez grand pour la contenir, cela provoquera un débordement de tampon.

strcpy_s () est un version à sécurité renforcée de strcpy (). Avec strcpy_s, vous pouvez spécifier la taille du tampon de destination pour éviter les débordements de tampon pendant les copies.

char tuna[5];  // a buffer which holds 5 chars incluing the null character.
char salmon[] = "A string which is longer than 5 chars";

strcpy( tuna, salmon ); // This will corrupt your memory because of the buffer overflow.

strcpy_s( tuna, 5, salmon ); // strcpy_s will not write more than 5 chars.
20
Deadlock

Je voudrais ajouter que si vous essayez de compiler du code d'autres personnes, MS se plaindra toujours des fonctions dangereuses dans la bibliothèque standard. Définissez simplement _CRT_SECURE_NO_WARNINGS comme le message d'erreur vous le dit et MSVC fonctionnera comme n'importe quel autre compilateur.

2
Navin