I have a C++11 project, and I added some strcpy_s
method calls.
This works on windows, but when compiling on gcc, there is an error
stating that strcpy_s
symbol is not found.
I did add the line
#define __STDC_WANT_LIB_EXT1__ 1
to the code, to no avail.
GCC (or rather, glibc) does not support strcpy_s()
and friends. For some ideas on where you can find a library which does support them, see here: Are there any free implementations of strcpy_s and/or TR24731-1?
strcpy_s
and friends are not a part of C++ just yet. It seems that C++17 will have them, but as of now providing them is up to the implementations. It seems glibc doesn't.
In fact, according to the cppreference, __STDC_WANT_LIB_EXT1__
will only work if __STDC_LIB_EXT1__
is defined. On my Arch Linux it isn't.
#ifdef __STDC_LIB_EXT1__
constexpr bool can_have_strcpy_s = true;
#else
constexpr bool can_have_strcpy_s = false;
#endif
You can use strncpy
. With some care, it can be safe.