2016-10-14 3 views
3

저는 C++ 11 프로젝트를 가지고 있으며 strcpy_s 메소드 호출을 추가했습니다. 이것은 Windows에서 작동하지만 gcc에서 컴파일 할 때 strcpy_s 심볼을 찾을 수 없다는 내용의 오류가 있습니다. strcpy_s가 gcc와 작동하지 않습니다

나는 아무 소용이 코드에 라인을

#define __STDC_WANT_LIB_EXT1__ 1

를 추가했다.

+2

기능이 무엇인지, 어디에서 지원되는지 찾아 보았습니까? 빠른 Google 검색을 기반으로하는 C11 기능처럼 보입니다. C++ 11/C++ 14는 C99을 기반으로합니다. 유사 유사 : http://stackoverflow.com/q/37569204/560648 –

답변

3

strcpy_s 그리고 친구들은 아직 C++의 일부가 아닙니다. C++17에는 그 (것)들이있을 것입니다, 그러나 지금 제공으로 그 (것)들은 실시까지이다. glibc는 그렇지 않습니다.

사실 cppreference에 따르면 은 __STDC_LIB_EXT1__이 정의 된 경우에만 작동합니다. 내 아치 리눅스에서는 그렇지 않습니다.

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

strncpy을 사용할 수 있습니다. 약간의주의를 기울이면 안전 할 수 있습니다.

+1

Re : "왜 strncpy를 사용하지 않습니까?" - 음, 작동하지 않기 때문에? 예, 작동시킬 수는 있지만 strcpy에 대한 "안전한"대체가되도록 설계되지 않았습니다. 그렇지 않습니다. –

+0

@PeteBecker는 문구를 다시 씁니다. 지금 받아 들일 수 있습니까? – krzaq