Linux マシンの関数の直接的な代替手段は何vsnwprintf
ですか?また、それを使用するにはどのヘッダーを含める必要がありますか?
アドバイスをありがとう
この関数のLinuxバリアントは次snprintf
のとおりです。vsnprintf
stdio.h
int snprintf(char *str, size_t size, const char *format, ...);
int vsnprintf(char *str, size_t size, const char *format, va_list args);
およびによって提供されるUnicodeバージョンwchar.h
:
int swprintf(wchar_t *wcs, size_t maxlen, const wchar_t *format, ...);
int vswprintf(wchar_t *wcs, size_t maxlen, const wchar_t *format, va_list args);
http://linux.die.net/man/3/snprintf
http://linux.die.net/man/3/swprintf
それはvsnwprintf()
(sic)が何をするか、そしてそのパラメータリストが何であるかに依存します。
C99 標準で説明されていますvswprintf()
(セクション 7.24.2.7)。それを使用するには、 #include<stdarg.h>
と<wchar.h>
. 実装は標準ライブラリにある必要があります。
それに代わるものはありません。
他の回答で提案されているvswprintfは、必要なバッファ長を示していません。最初の 2 つの引数に nullptr と 0 を渡すと、必要なバッファー長ではなく、-1 が返されます。これは、文書化されている方法と、clang 4 で実際に機能する方法の両方です。
その回答には回避策があります https://stackoverflow.com/a/16352146/126995 vscwprintf ソース コードの最後までスクロールします。この回避策は小さな文字列には有効ですが、大きな文字列では比較的遅く、非常に大きな文字列のスタック スペースを使い果たすことさえあります。