//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); }エラーが起きる最小のプログラムです。エラーメッセージも一応添付しておきます。
VC2005のsprintf
VC2005のsprintf
VC2005で、次のプログラムを実行すると、実行時エラーが起きてしまいます。なぜでしょうか?
Re:VC2005のsprintf
MSDN で調べてみると、%nは「ストリームまたはバッファにこれまでに書き込まれた文字数」
とあります。
そしてこれは、セキュリティ上の理由で限定では無効となっていて、
実行時エラー(無効なパラメータ ハンドラ)が発生します。
%nを有効にするには、 _set_printf_count_output(1); を事前に呼び出す必要があります。
とあります。
そしてこれは、セキュリティ上の理由で限定では無効となっていて、
実行時エラー(無効なパラメータ ハンドラ)が発生します。
%nを有効にするには、 _set_printf_count_output(1); を事前に呼び出す必要があります。