8

次のコードに対して次の警告が表示される理由:)

コード:

_stprintf(m_szFileNamePath,_T("%s"),strFileName);

警告 C4996: '_swprintf': swprintf は ISO C 標準に準拠するように変更され、余分な文字数パラメーターが追加されました。従来の Microsoft swprintf を使用するには、_CRT_NON_CONFORMING_SWPRINTFS を設定します。

_strprintf はマクロであり、_UNICODE が定義されている場合は _swprintf に評価され、それ以外の場合は sprintf になります。

さて、この _swprintf は何でしょう。関数 swprintf がありますが、_stprintf が swprintf ではなく _swprintf に評価されるのはなぜですか。

_xxx 関数と xxx 関数の違いは何ですか?

編集:

_stprintf の UNICODE バージョンには 2 つの定義がありますが、どちらが含まれていますか?

tchar.h または strsafe.h にあるものは?

4

5 に答える 5

5

http://msdn.microsoft.com/en-us/library/ybk95axf%28VS.80%29.aspx

swprintf は sprintf のワイド文字バージョンです。swprintf へのポインタ引数はワイド文字列です。swprintf でのエンコーディング エラーの検出は、sprintf とは異なる場合があります。swprintf と fwprintf は同じように動作しますが、swprintf は出力を FILE 型の出力先ではなく文字列に書き込みます。また、swprintf では count パラメータに書き込む最大文字数を指定する必要があります。_l 接尾辞が付いたこれらの関数のバージョンは、現在のスレッド ロケールの代わりに渡された locale パラメータを使用する点を除いて同じです。

Visual C++ 2005 では、swprintf は、size_t 型の 2 番目のパラメーター count を必要とする ISO C 標準に準拠しています。古い非標準の動作を強制するには、_CRT_NON_CONFORMING_SWPRINTFS を定義します。将来のバージョンでは、古い動作が削除される可能性があるため、新しい準拠動作を使用するようにコードを変更する必要があります。

于 2009-08-18T13:44:20.990 に答える
1

もしかしてこれ?

_stprintf(m_szFileNamePath, 256, _T("%s"), strFileName); 
于 2010-05-08T12:51:31.073 に答える
0

Microsoft は CRT _swprintf の独自の拡張機能を提供しています - unix とは互換性がありません (たとえば)。

于 2009-08-18T13:44:36.963 に答える
0

Microsoft (以前は?) は、C 標準の一部ではなかった広く利用可能な非 win32 関数にアンダースコアを付けたプレフィックス。

于 2009-08-18T13:54:51.977 に答える