- ベストアンサー
Visual C++ Express Edition 警告に関して
Visual C++ Express Editionを導入して最近Cを学び始めたのですが、 Visual C++ Express Editionでコンパイルした際に警告がたくさん でてしまいます。エラーさえなければ実行はできるようですが、できれば警告もなくしないです。以下がソースファイルです。 #include <stdio.h> int main(void) { int x,y,z; z=1; for(;z == 1;){ printf("数値を入力してください:\n"); scanf("%d",&x); printf("数値を入力してください:\n"); scanf("%d",&y); printf("加算すると%d\n減算すると%d\n" "乗算すると%d\n除算すると商%dは余りは%d\n",x+y,x-y,x*y,x/y,x%y); printf("計算を続けますか?\n続けなるならば1を押してください:"); scanf("%d",&z); } return(0); } コンパイルをすると警告として以下がでました。 c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : 'scanf' の宣言を確認してください。 今回の例の場合の警告の解決方法と一般的に警告をどのように解決をすればいいのか(エラーだったら文法的に間違えているのだが、警告だと?)教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VC++ExpressEditionと同時にインストールされるヘルプ MSDNはご覧になりましたか? これで scanfなどを表示すると 冒頭に 標準入力ストリームから書式付きデータを読み取ります。セキュリティが強化されたバージョンが使用可能になったので、これらの関数は使用されなくなりました。「scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l」を参照してください といった文言が確認できるかと思います つまり MicrosoftのVC++コンパイラのCRT(Cランタイムライブラリ)が更新されて scanfなどは古い形式になりました と言う警告です 表示された警告メッセージの『C4996』をクリックして F1キーを押してヘルプを参照してみましょう
その他の回答 (2)
- crew21
- ベストアンサー率26% (58/222)
文法的な問題はないよ。 試しにBorland C++ でワーニングレベルを最高に挙げてコンパイルしてみたがワーニングは出なかったし。 それよりも、主題からは外れるけど、もうちょっとプログラムの動作性を保証するよう組むべきだな。 >続けなるならば1を押してください >数値を入力してください の何れの場所でも、数値以外のキー(例えばY)を押下すると無限ループしちゃうよね。 きついこと言ってすまんが、学び始めとはいえ、これは通らんぞ。
お礼
たしかに数値以外を押すと無限ループしました。 例外な操作?が行われた際への対処方法はおいおい理解していこう と思います。 ご指摘ありがとうございました。
- php504
- ベストアンサー率42% (926/2160)
VC++2005から文字列を扱う標準関数に警告が出るようになっただけでプログラムには問題ありません。 http://www.geocities.jp/ky_webid/common/vc2005warning.html
お礼
解説されているHPを提示していただきありがとうございました。
お礼
ヘルプでscanfで検索したところたしかに↑のような内容が記載されていました。scanfをscanf_sにしたところ警告もなくなり安心しました。 回答ありがとうございました。