![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お盆休みを利用して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-)」に設定すればこのチェックが行われなくなります。
![「C++でscanfは使えない?」の回答画像4](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/d/4884071_5497ec8d13348/M.jpg)
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...
-
Excel VBAのCSVファイルマージ...
-
左側がクラス、構造体、共用体...
-
Visual Studioのstrcpy_sについて
-
C# の File.Exists について
-
OPMLファイルの作り方
-
キーの自動入力
-
fortranでプログラムを実行する...
-
実行時エラー:429 ActiveXコ...
-
C2146を回避するにはどうしたら...
-
Excelのエラーで困ってます。
-
InsertItemTemplate内でcustomv...
-
string.h内でエラー
-
error C2143: 構文エラー の対処法
-
ビルド失敗 指定されたファイ...
-
Visual Basic でサポートされて...
-
BC30002: 型 'ListItem' が定義...
-
関数やクラスの相関関係を表示...
-
VisualC++でエラーが大量に
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
fortranでプログラムを実行する...
-
Excelのエラーで困ってます。
-
Handlesについて
-
HEWを使用しているのですが、こ...
-
バッチからsqlplusの接続エラー...
-
デバッグ中のエラーのことで教...
-
VB2008で定数に色の設定をした...
-
コンパイルできません。
-
sys/time.hのインクルードがで...
-
multiple definitionというエラー
-
HANDLEの宣言でのエラー
-
BC30002: 型 'ListItem' が定義...
-
visual C++ でビルドの中止がで...
-
RightとLeft関数のライブ...
-
ビルド失敗 指定されたファイ...
-
Visual Studioのstrcpy_sについて
-
エクセルでマクロを実行すると...
おすすめ情報