次のコードの何が問題になっていますか?関数print()をprintfとして機能させるにはどうすればよいですか?
#include <stdio.h>
#include<stdarg.h>
void print(char *format,...)
{
va_list args;
va_start(args,format);
printf(format,args);
}
int main() {
print("%d %s",5,"le");
}
varargsを渡す必要がある場合は、vprintf
代わりにを使用してください。
おそらくvprintfを見る必要があります。その関数(および関連する関数)を使用すると、可変引数リストを渡すことができ、フォーマットを処理します。
そこでvprintfが必要です。この質問を見てください。同様の問題があります。printf関数ファミリーとvprintf関数ファミリーの違いは何ですか。また、どちらを使用する必要があるのでしょうか。
まず第一に、va_end()
を使用する場合に必須の呼び出しがありませんva_start()
。
また、引数としてprintf()
使用する場合は使用できません。va_list
を見てください
vprintf()
。
例:
void print(char *format,...)
{
va_list args;
va_start(args,format);
vprintf(format,args);
va_end(args);
}