みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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' の宣言を確認してください。

今回の例の場合の警告の解決方法と一般的に警告をどのように解決をすればいいのか(エラーだったら文法的に間違えているのだが、警告だと?)教えてください。

投稿日時 - 2007-12-12 05:34:01

QNo.3591455

困ってます

質問者が選んだベストアンサー

VC++ExpressEditionと同時にインストールされるヘルプ MSDNはご覧になりましたか?

これで scanfなどを表示すると 冒頭に
標準入力ストリームから書式付きデータを読み取ります。セキュリティが強化されたバージョンが使用可能になったので、これらの関数は使用されなくなりました。「scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l」を参照してください
といった文言が確認できるかと思います

つまり MicrosoftのVC++コンパイラのCRT(Cランタイムライブラリ)が更新されて scanfなどは古い形式になりました
と言う警告です

表示された警告メッセージの『C4996』をクリックして F1キーを押してヘルプを参照してみましょう

投稿日時 - 2007-12-13 00:27:33

お礼

ヘルプでscanfで検索したところたしかに↑のような内容が記載されていました。scanfをscanf_sにしたところ警告もなくなり安心しました。
回答ありがとうございました。

投稿日時 - 2007-12-13 02:46:41

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

文法的な問題はないよ。
試しにBorland C++ でワーニングレベルを最高に挙げてコンパイルしてみたがワーニングは出なかったし。

それよりも、主題からは外れるけど、もうちょっとプログラムの動作性を保証するよう組むべきだな。
>続けなるならば1を押してください
>数値を入力してください
の何れの場所でも、数値以外のキー(例えばY)を押下すると無限ループしちゃうよね。

きついこと言ってすまんが、学び始めとはいえ、これは通らんぞ。

投稿日時 - 2007-12-12 15:39:00

お礼

たしかに数値以外を押すと無限ループしました。
例外な操作?が行われた際への対処方法はおいおい理解していこう
と思います。
ご指摘ありがとうございました。

投稿日時 - 2007-12-13 02:33:34

ANo.1

VC++2005から文字列を扱う標準関数に警告が出るようになっただけでプログラムには問題ありません。
http://www.geocities.jp/ky_webid/common/vc2005warning.html

投稿日時 - 2007-12-12 09:56:18

お礼

解説されているHPを提示していただきありがとうございました。

投稿日時 - 2007-12-13 02:29:35

あなたにオススメの質問