- ベストアンサー
C言語のビルドが失敗!エラーメッセージの意味は?
- C言語のビルドが失敗してしまいます。参考書に載っていたソースプログラムをvisualC++2010に打ち込んだのですが、エラーメッセージが出てきてしまいます。
- エラーメッセージは'scanf' の宣言を確認してください。'warning C4566: ユニバーサル文字名 '¥' によって表示されている文字は、現在のコード ページ (932) で表示できません。error C2065: 'i1' : 定義されていない識別子です。
- エラーメッセージが出た原因や解決策がわかりません。どなたか教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答2の補足に書かれている警告は、scanfが(バッファオーバーランを起こす可能性があるので)安全でないかもしれないというものです。代わりに、対策されているscanf_sを使うか、この警告を出さない設定(_CRT_SECURE_NO_WARNINGSを定義する)が提案されています。 scanfを使うと、必ず出るものです。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
そのエラーになったプログラムをそのまま貼り付けてないのでは?サンプルの方を貼り付けたとか、サンプル見ながら入力しなおした、とか エラーがあると報告されている行数と、おそらくのそれが出ているであろう行が一致してません。 正しい情報が無ければ、こちらでは判断できません。 エラーメッセージの読み方はわかりますか? ()の中がエラーのある行数、errorはビルドに致命的な「エラー」、warning はビルドはできるけども、場合によっては実行時に問題になる「警告」、その後のC???はエラー番号で、これで検索するとある程度の解説が見付かる。その後は簡単にエラー/警告の内容を説明しているものです。 > ・(14): error C2065: 'i1' : 定義されていない識別子です。 メッセージの通り、定義されていない識別子(変数とか定数とか関数とか) i1 が使われている、というものですが、このプログラム中にどこにも i1 なんて書いてありません。 おそらく printf("date %d=",i+1); が printf("date %d=",i1); となっているのでは? /* あと、細かいことを言えば「data」ですね */ > ・'scanf' の宣言を確認してください。 scanfはどこで使っているのでしょう?エラーメッセージはもうすこし長くなかったですか? > ・(11): warning C4566: ユニバーサル文字名 '\u00A5' によって表示されている文字は、現在のコード ページ (932) で表示できません ちょっと根が深い問題です。 nの前の\は実際にはどう表示されていますか? /を反対にしたような記号(バックスラッシュ)でしょうか?円記号でしょうか? なんにせよ、一度消して、キーボードの円記号のキーを入力しなおしてください。
補足
新しくプロジェクトを作って以下のように入力してみたら警告がでましたが、実行できました #include <stdio.h> #include <math.h> int main(void) { int d[33]; double m,v,s; int n=33; int i; double sum; printf("データを%d個入力してください\n",n); for(i=0;i<n;i++) { printf("data%d=",i+1); scanf("%d",&d[i]); } for(sum=0.0,i=0;i<n;i++) { sum+=d[i]; } m=sum/n; for(sum=0.0,i=0;i<n;i++) { sum+=(d[i]-m)*(d[i]-m); } v=sum/n; s=sqrt(v); printf("平均=%10.3f\n",m); printf("分散=%10.3f\n",v); printf("標準偏差=%10.3f\n",s); return 0; } コピペしたので、そのままです。nの前\は円マークです。 エラーメッセージは .cpp(16): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304) : 'scanf' の宣言を確認してください。 とでました。
- lv4u
- ベストアンサー率27% (1862/6715)
貼り付けられているソースをVS2008のVC++でコンパイルすると、コンパイルは通りましたね。 なので、ここにあるソースは、問題ないようですね。 原因は >>printf("データを%d個入力してください\n",n); の"\"がうまくユニコードに変換されないため、 >>・(11): warning C4566: ユニバーサル文字名 '\u00A5' によって表示されている文字は、現在のコード ページ (932) で表示できません のエラーになったように思えます。 とりあえず、漢字メッセージを漢字以外のアルファベット表示に変えてみるとコンパイルエラーは無くなると思います。 なかなかユニコード変換が絡むと、よくわからないエラー状況になりますね。
お礼
ありがとうございました。