sprintf_s
передает размер DestinationArray
, а не SourceString. Кроме того, не передавайте произвольные строки как форматную строку, вот как вы получаете эксплойты форматной строки.
Более правильная формулировка:
#if _WINDLL
sprintf_s(DestinationArray, "%s", SourceString.c_str()); //Syntax using sprintf_s for Windows
#else
snprintf(DestinationArray, sizeof(DestinationArray), "%s", SourceString.c_str()); //syntax using snprintf For Linux
#endif
Или вы можете определить sprintf_s
для Linux как макрос:
#define sprintf_s(buf, ...) snprintf((buf), sizeof(buf), __VA_ARGS__)