を使用する C プログラムがありますsprintf_s
。Windows では問題なく動作しますが、Linux でコードをコンパイルすると、次のエラーが発生します。
sprintf_s was not declared in this scope.
なぜこれが起こり、どうすれば修正できますか?
これは標準ではありません。Linux ではそのような機能は見つかりません。
標準関数snprintf
は同様のセマンティクスを持つ必要があります。
sprintf_s は標準 C ライブラリの一部ではないため移植性がなく、Linux では使用できません。しかし、snprintf があります。これは非常によく似ており、目的を達成するのに役立ちます。
sprintf_s
は、C11 標準のオプションの付属書である付属書 K の一部にすぎません。
附属書K
...
K.2 スコープ
- この附属書は、プログラムのセキュリティ脆弱性の軽減に役立つ一連のオプションの拡張機能を指定し、既存の標準ヘッダーで宣言または定義された新しい関数、マクロ、および型を構成します。
...
K.3.5.3.6 sprintf_s 関数
あらすじ
#define __STDC_WANT_LIB_EXT1__1 #include <stdio.h> int sprintf_s(char * restrict s, rsize_t n, const char * restrict format, ...);
(強調追加)
POSIX (または Linux) に組み込まれることはありませんでした (委員会ではその有用性についての議論さえあります)。
移植性を高めるsnprintf
には、コア標準の一部であり、必要なすべての機能を提供する を使用してください。
sprintf_s
は標準 C ライブラリの一部ではないため、Linux では使用できません。
ただし、snprintf
標準であり、同じタスクを実行する必要があります。