ページ 11

sscanfとsscanf_s

Posted: 2012年3月15日(木) 19:52
by zxzy
VC++2010を使っているとsscanfなどを使うと_sを最後につけたものを
使えと警告が出ます。
セキュリティ面?でも_sがついているほうがいいらしいのでVC++では
_s付きを普段使っています。

今回

コード:

sscanf_s(str,"%d%c %d",&i,&c,&j);
という部分でエラーが出ました。
コンパイルは通るのですが実行時に強制終了し
ウィンドウズのエラーを送信するとかのダイアログが出てきます。
デバッグ有りで実行してみるとハンドルされていない例外で
アクセス違反と出ます。
使い方は間違っていないと思うのに何度やってもエラーが出るため

コード:

sscanf(str,"%d%c %d",&i,&c,&j);
_sをはずしたsscanfにしてみました。
するとエラーが出ず正常に動作します。

_s付きだとエラーになる原因って何なのでしょうか?

Re: sscanfとsscanf_s

Posted: 2012年3月15日(木) 20:31
by jay
sscanf_sとsscanfでは引数が違うようですね
これ以外にもセキュリティ強化されている差分的な関数は引数が変わっていたりするので注意してくださいね

対処法などはこちらに参考にしてください
http://soundengine.jp/services/tips/?date=2007-02-05

Re: sscanfとsscanf_s

Posted: 2012年3月15日(木) 20:46
by zxzy
VC++で引数書いているときに表示されるものは

int sscanf(const char *_Src,const char *_Format,...)
int sscanf_s(const char *_Src,const char *_Format,...)

で同じだったので変わりないと思っていたのですが
ここでは見れない部分が変わっていたのですね。

ありがとうございました。