可変長引数についての質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 可変長引数についての質問です

Re: 可変長引数についての質問です

#4

by かずま » 6年前

printf の代わりに vprintf を使いましょう。

コード:

#include <cstdio>
#include <cstdarg>

int foo(const char *format, ...) {
	va_list ap;
	va_start(ap, format);
	int rv = vprintf(format, ap);
	va_end(ap);
	return rv;
}

int main() {
	foo("%d + %d = %d\n", 3, 4, 3+4);
}

Re: 可変長引数についての質問です

#3

by 参照魚 » 6年前

templateを用いずに関数で完結させるとしたらこんな感じでした。

コード:

int foo( const char* format, ... ){

	va_list	list;

	va_start( list, format );

	const auto	num = std::vsnprintf( nullptr, 0, format, list );
	const auto	buf = new char[num];

	::vsprintf( buf, format, list );

	const auto	val = printf( "%s", buf );

	delete [] buf;

	va_end( list );

	return val;
}

Re: 可変長引数についての質問です

#2

by keito » 6年前

すみません!自己解決しました!

コード:

#include <cstdio>

template <typename ... Args>
int foo(const char *format, Args const & ... args) {
	return printf(format, args ...);
}

int main() {
foo("%d + %d = %d\n", 3, 4, 3+4);
}

可変長引数についての質問です

#1

by keito » 6年前

いつもお世話になっています!C++は初心者です。

可変長引数についての質問なんですが、以下のような関数を作りたいです。

コード:

int foo(const char* String, ...){
	//...
	
	// fooの0番目の引数、1番目の引数、2番目の引数...を実引数とするprintf
	printf( ) 
}
こんな感じの関数fooを作りたいのですがどのようにprintfの括弧の中身を書けばいいのか分からずにいます…。
分かる方がいたら教えてください。

ページトップ