Linux マシンの関数の直接的な代替手段は何vsnwprintfですか?また、それを使用するにはどのヘッダーを含める必要がありますか?
アドバイスをありがとう
この関数のLinuxバリアントは次snprintfのとおりです。vsnprintfstdio.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 ソース コードの最後までスクロールします。この回避策は小さな文字列には有効ですが、大きな文字列では比較的遅く、非常に大きな文字列のスタック スペースを使い果たすことさえあります。