お盆休みを利用してC言語の勉強をしようと思っています。
さわり程度にはわかるのですが、ポインタなどを本気で理解してみようと思っています。
PCにvisual studio2013が入っているので、2013のC++のプロジェクトを使って勉強していこうと思っているのですが、下記のように入力すると、scanfでエラーが出てしまいます。
#include "stdafx.h"
#include <stdio.h>
void main()
{
int n;
scanf("%d",&n);
}
C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?
No.3ベストアンサー
- 回答日時:
scanfはC言語の「文法」ではありません。
「標準ライブラリ」と呼ばれる、ライブラリに含まれる関数の一つでしかありません。
あと、具体的にどんなエラーメッセージが出たのですか?
メッセージの内容を読んで理解することも、プログラミング技術向上に大事なことです。
http://ja.wikipedia.org/wiki/Scanf#scanf.E3.81.A …
にあるように、scanfは使い方を間違えるととても「危険」な関数です。
そこで
http://msdn.microsoft.com/ja-jp/library/9y6s16x1 …
> セキュリティに関するメモ
とあるように、Microsoftとしてはセキュリティ強化版を使うことを推奨しています。
# 根本対策にはなってないという説もありますが。
そのため、設定次第では、scanfを使っただけで警告、またはエラーになります。
No.5
- 回答日時:
本気で勉強するつもりならエラーメッセージを読むようにしましょう。
そこに原因が書いてあるんですから。
>C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?
今回の件はVC++の機能により一部関数の使用に制限がかけられてるだけです(文法は全く関係ない)。
ただしC++はCの完全な上位互換性があるわけではありません。
No.4
- 回答日時:
まだポインタなども理解されていないという事なので、細かい部分は抜きで簡単に説明します。
まず、文法には問題ありません。
エラーになっているのは、SDL(Security Development Lifecycle)と呼ばれる機能が原因です。
よく「プログラムの脆弱性により意図しないコードが実行される…」みたいなセキュリティに関する内容を見かけると思いますが、こういった脆弱性は、実は「scanfやstrcpyなど」が温床になっていたりします。
そういったことを知らない人たちが、手軽にscanfやstrcpyを使ったりすると、いとも簡単に脆弱性が埋め込まれてしまうのです。
さすがに、このままではまずい!…ということで、SDLと呼ばれる、「使うとセキュリティ的にまずい」ものをチェックする機能が追加されたのです。
Cの基礎を勉強するレベルであれば、まだそこまでは気にする必要は無いと思うので(いずれはセキュリティ的にどうしてだめなのかも理解してくださいね)、まずはSDLを無効にすれば良いと思います。
プロジェクトを作成する際に「SDLのチェックを外す」(添付画像参照)か、プロジェクトのプロパティで「構成プロパティ>C/C++>全般>SDLチェック」を「いいえ(/sdl-)」に設定すればこのチェックが行われなくなります。
No.2
- 回答日時:
エラー1error 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.d:\documents\documents\visual studio 2013\projects\qa8701599\qa8701599\source.cpp61qa8701599
とか言われますね。
VC2010くらいならエラーじゃなくてワーニング扱いだったかと思いますが。
対処は…メッセージに書かれているとおりでしょうかね。
難しい英文でもないので読んでくださいな。
No.1
- 回答日時:
エラーの意味を聞きたいのなら「エラーが出てしまいます」というだけでなくそのエラーメッセージも書きましょう。
まあ、多分以下のページで話題になっていることだと思いますけど
http://dixq.net/forum/viewtopic.php?f=3&t=13793
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
コンパイルできません。
-
Excelのエラーで困ってます。
-
ビルドが失敗してしまいます
-
適切な変換関数が存在しない???
-
fortranでプログラムを実行する...
-
Arduinoに関する質問
-
Visual Studioのstrcpy_sについて
-
HEWを使用しているのですが、こ...
-
ビルド失敗 指定されたファイ...
-
WindowsからLinuxへの移植
-
入れ子になっている構造体配列...
-
”wchar_t*型は渡せない”という...
-
sys/time.hのインクルードがで...
-
エラー 'iostream.h' : No su...
-
VB2008で定数に色の設定をした...
-
SONY Readerで公開pdfを読む時...
-
VisualStudio2010 VC++ エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
Excelのエラーで困ってます。
-
HEWを使用しているのですが、こ...
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
fortranでプログラムを実行する...
-
BC30002: 型 'ListItem' が定義...
-
VBAでファイルを開くプログラム...
-
sys/time.hのインクルードがで...
-
error C3867 関数呼び出しには...
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
LPCWSTRとchar
-
RightとLeft関数のライブ...
-
Handlesについて
-
multiple definitionというエラー
-
ACCESSのDate関数のエラー表示...
-
WindowsからLinuxへの移植
おすすめ情報