web-dev-qa-db-fra.com

strcpy_s ne fonctionne pas avec gcc

J'ai un projet C++ 11 et j'ai ajouté quelques strcpy_s appels de méthode. Cela fonctionne sur Windows, mais lors de la compilation sur gcc, il y a une erreur indiquant que strcpy_s le symbole est introuvable.

J'ai ajouté la ligne

#define __STDC_WANT_LIB_EXT1__ 1

au code, en vain.

12
Jacko

GCC (ou plutôt glibc) ne prend pas en charge strcpy_s() et ses amis. Pour quelques idées sur où trouver une bibliothèque qui les prend en charge, voir ici: Existe-t-il des implémentations gratuites de strcpy_s et/ou TR24731-1?

9
John Zwinck

strcpy_s et les amis ne font pas encore partie de C++. Il semble que C++ 17 les aura, mais pour l'instant, les fournir dépend des implémentations. Il semble que la glibc ne fonctionne pas.

En fait, selon la cppreference , __STDC_WANT_LIB_EXT1__ ne fonctionnera que si __STDC_LIB_EXT1__ est défini. Sur mon Arch Linux, ce n'est pas le cas.

#ifdef __STDC_LIB_EXT1__
constexpr bool can_have_strcpy_s = true;
#else
constexpr bool can_have_strcpy_s = false;
#endif

Vous pouvez utiliser strncpy . Avec un peu de soin, cela peut être sûr.

6
krzaq