VC2005のsprintf

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

VC2005のsprintf

#1

投稿記事 by tk-xleader » 16年前

VC2005で、次のプログラムを実行すると、実行時エラーが起きてしまいます。なぜでしょうか?
//C++としてコンパイルしています。
#include<cstdio>

int main()
{
	char buf[1024]={0};
	int n=0;
	std::sprintf(buf,"%x%n",4892345,&n);
	std::printf("%s,%d",buf,n);
}
エラーが起きる最小のプログラムです。エラーメッセージも一応添付しておきます。

Mist

Re:VC2005のsprintf

#2

投稿記事 by Mist » 16年前

私が知らないだけなのかもしれませんけど%nってなんですか?

Mist

Re:VC2005のsprintf

#3

投稿記事 by Mist » 16年前

VC2008のエラー画面添付します。

御津凪

Re:VC2005のsprintf

#4

投稿記事 by 御津凪 » 16年前

MSDN で調べてみると、%nは「ストリームまたはバッファにこれまでに書き込まれた文字数」
とあります。
そしてこれは、セキュリティ上の理由で限定では無効となっていて、
実行時エラー(無効なパラメータ ハンドラ)が発生します。

%nを有効にするには、 _set_printf_count_output(1); を事前に呼び出す必要があります。

tk-xleader

Re:VC2005のsprintf

#5

投稿記事 by tk-xleader » 16年前

_set_printf_count_output()を呼び出してみたところ、うまくいきました。ありがとうございました。

たかぎ

Re:VC2005のsprintf

#6

投稿記事 by たかぎ » 16年前

%nを無効にしたい動機は理解できますが、既定で標準規格と異なる動作をするのは、それ自体が不具合といわれても仕方がないような...

閉鎖

“C言語何でも質問掲示板” へ戻る