すべての_s
機能 ( swprintf_s
、memcpy_s
) は Microsoft の追加です。これらは Microsoft の C ライブラリの一部です。GCC を使用すると、別の C ライブラリを使用することになります。これには、Microsoft の追加機能は含まれていません (ただし、独自の追加機能が含まれている場合があります)。Microsoft は C ライブラリを「CRT」または「C ランタイム」と呼び、GCC ユーザーはそれを「libc」または「glibc」(特定の実装) と呼んでいます。
Microsoft の標準 C ライブラリ ( MSDN docs )の関数の一覧を見ると、かなり多くの非標準関数が含まれていることがわかります。これらのほとんどは、Microsoft の「セキュリティ強化」 ( MSDN ドキュメント) の一部です。一般に、セキュリティ強化は移植性がなく、安全なコードを書くために必要ではないため、避けることをお勧めします。
修正:swprintf
の代わりに使用できますswprintf_s
。このswprintf
関数は C 標準の一部であるため、多くの実装に存在します (ただし、Windows 以外のプラットフォームでは使用しないようにする必要がありますwchar_t
)。
LPCWSTR foo = L"É %s";
LPCWSTR arg = L"bá";
size_t msgbuflen = wcslen(foo) + wcslen(arg) + 1;
LPCWSTR msg = malloc(len);
if (!msg) error...;
swprintf(msg, msgbuflen, foo, arg);
これLPCWSTR
は の単なる派手な typedef であるためconst wchar_t *
、 にキャストする必要はありませんwchar_t *
。