29

を使用する C プログラムがありますsprintf_s。Windows では問題なく動作しますが、Linux でコードをコンパイルすると、次のエラーが発生します。

sprintf_s was not declared in this scope.

なぜこれが起こり、どうすれば修正できますか?

4

6 に答える 6

42

これは標準ではありません。Linux ではそのような機能は見つかりません。

標準関数snprintfは同様のセマンティクスを持つ必要があります。

于 2011-01-28T12:32:21.703 に答える
9

sprintf_s は標準 C ライブラリの一部ではないため移植性がなく、Linux では使用できません。しかし、snprintf があります。これは非常によく似ており、目的を達成するのに役立ちます。

于 2011-01-28T12:46:36.097 に答える
8

sprintf_sは、C11 標準のオプションの付属書である付属書 K の一部にすぎません。

附属書K

...

K.2 スコープ

  1. この附属書は、プログラムのセキュリティ脆弱性の軽減に役立つ一連のオプションの拡張機能を指定し、既存の標準ヘッダーで宣言または定義された新しい関数、マクロ、および型を構成します。

...

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には、コア標準の一部であり、必要なすべての機能を提供する を使用してください。

于 2014-11-01T21:20:56.387 に答える
6

sprintf_sは標準 C ライブラリの一部ではないため、Linux では使用できません。

ただし、snprintf標準であり、同じタスクを実行する必要があります。

于 2014-11-01T21:11:44.110 に答える