저는 C++ 11 프로젝트를 가지고 있으며 strcpy_s
메소드 호출을 추가했습니다. 이것은 Windows에서 작동하지만 gcc에서 컴파일 할 때 strcpy_s
심볼을 찾을 수 없다는 내용의 오류가 있습니다. strcpy_s가 gcc와 작동하지 않습니다
#define __STDC_WANT_LIB_EXT1__ 1
를 추가했다.
저는 C++ 11 프로젝트를 가지고 있으며 strcpy_s
메소드 호출을 추가했습니다. 이것은 Windows에서 작동하지만 gcc에서 컴파일 할 때 strcpy_s
심볼을 찾을 수 없다는 내용의 오류가 있습니다. strcpy_s가 gcc와 작동하지 않습니다
#define __STDC_WANT_LIB_EXT1__ 1
를 추가했다.
GCC (또는 오히려 glibc)는 strcpy_s()
및 친구들을 지원하지 않습니다. 그들을 지원하는 라이브러리를 찾을 수있는 곳에 대한 아이디어는 여기를 참조하십시오 : Are there any free implementations of strcpy_s and/or TR24731-1?
감사합니다, 존. 방금 직접 구현했습니다. – Jacko
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
을 사용할 수 있습니다. 약간의주의를 기울이면 안전 할 수 있습니다.
Re : "왜 strncpy를 사용하지 않습니까?" - 음, 작동하지 않기 때문에? 예, 작동시킬 수는 있지만 strcpy에 대한 "안전한"대체가되도록 설계되지 않았습니다. 그렇지 않습니다. –
@PeteBecker는 문구를 다시 씁니다. 지금 받아 들일 수 있습니까? – krzaq
기능이 무엇인지, 어디에서 지원되는지 찾아 보았습니까? 빠른 Google 검색을 기반으로하는 C11 기능처럼 보입니다. C++ 11/C++ 14는 C99을 기반으로합니다. 유사 유사 : http://stackoverflow.com/q/37569204/560648 –