1

Linux マシンの関数の直接的な代替手段は何vsnwprintfですか?また、それを使用するにはどのヘッダーを含める必要がありますか?

アドバイスをありがとう

4

6 に答える 6

3

この関数の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

于 2012-05-04T10:14:16.090 に答える
3

それはvsnwprintf() (sic)が何をするか、そしてそのパラメータリストが何であるかに依存します。

C99 標準で説明されていますvswprintf()(セクション 7.24.2.7)。それを使用するには、 #include<stdarg.h><wchar.h>. 実装は標準ライブラリにある必要があります。

于 2012-05-04T10:16:43.043 に答える
1

それに代わるものはありません。

他の回答で提案されているvswprintfは、必要なバッファ長を示していません。最初の 2 つの引数に nullptr と 0 を渡すと、必要なバッファー長ではなく、-1 が返されます。これは、文書化されている方法と、clang 4 で実際に機能する方法の両方です。

その回答には回避策があります https://stackoverflow.com/a/16352146/126995 vscwprintf ソース コードの最後までスクロールします。この回避策は小さな文字列には有効ですが、大きな文字列では比較的遅く、非常に大きな文字列のスタック スペースを使い果たすことさえあります。

于 2017-09-19T00:02:19.600 に答える