アプリ版:「スタンプのみでお礼する」機能のリリースについて

お盆休みを利用してC言語の勉強をしようと思っています。
さわり程度にはわかるのですが、ポインタなどを本気で理解してみようと思っています。

PCにvisual studio2013が入っているので、2013のC++のプロジェクトを使って勉強していこうと思っているのですが、下記のように入力すると、scanfでエラーが出てしまいます。

#include "stdafx.h"
#include <stdio.h>

void main()
{
int n;
scanf("%d",&n);
}

C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?

A 回答 (6件)

scanfはC言語の「文法」ではありません。


「標準ライブラリ」と呼ばれる、ライブラリに含まれる関数の一つでしかありません。


あと、具体的にどんなエラーメッセージが出たのですか?
メッセージの内容を読んで理解することも、プログラミング技術向上に大事なことです。

http://ja.wikipedia.org/wiki/Scanf#scanf.E3.81.A …
にあるように、scanfは使い方を間違えるととても「危険」な関数です。
そこで
http://msdn.microsoft.com/ja-jp/library/9y6s16x1 …
> セキュリティに関するメモ
とあるように、Microsoftとしてはセキュリティ強化版を使うことを推奨しています。
# 根本対策にはなってないという説もありますが。

そのため、設定次第では、scanfを使っただけで警告、またはエラーになります。
    • good
    • 0
この回答へのお礼

scanfは文法ではないのですね。勉強になります

お礼日時:2014/08/04 19:57

Visual STUDIO 2005くらいから scanf_sになっていると思います。


オーバーロードされた関数が沢山有りますのでscanf_sでググってみて下さい。

頑張ってね。
    • good
    • 2
この回答へのお礼

ありがとうございます。よくわからないながらにいろいろ触ってたらなんとかエラーがでなくなりました。

お礼日時:2014/08/04 19:57

本気で勉強するつもりならエラーメッセージを読むようにしましょう。


そこに原因が書いてあるんですから。

>C++ではC言語の文法は全て使えると聞いていたのですが、ある程度例外もあるということなのでしょうか?それともなにか原因があるのでしょうか?

今回の件はVC++の機能により一部関数の使用に制限がかけられてるだけです(文法は全く関係ない)。
ただしC++はCの完全な上位互換性があるわけではありません。
    • good
    • 1

まだポインタなども理解されていないという事なので、細かい部分は抜きで簡単に説明します。



まず、文法には問題ありません。
エラーになっているのは、SDL(Security Development Lifecycle)と呼ばれる機能が原因です。

よく「プログラムの脆弱性により意図しないコードが実行される…」みたいなセキュリティに関する内容を見かけると思いますが、こういった脆弱性は、実は「scanfやstrcpyなど」が温床になっていたりします。
そういったことを知らない人たちが、手軽にscanfやstrcpyを使ったりすると、いとも簡単に脆弱性が埋め込まれてしまうのです。

さすがに、このままではまずい!…ということで、SDLと呼ばれる、「使うとセキュリティ的にまずい」ものをチェックする機能が追加されたのです。


Cの基礎を勉強するレベルであれば、まだそこまでは気にする必要は無いと思うので(いずれはセキュリティ的にどうしてだめなのかも理解してくださいね)、まずはSDLを無効にすれば良いと思います。
プロジェクトを作成する際に「SDLのチェックを外す」(添付画像参照)か、プロジェクトのプロパティで「構成プロパティ>C/C++>全般>SDLチェック」を「いいえ(/sdl-)」に設定すればこのチェックが行われなくなります。
「C++でscanfは使えない?」の回答画像4
    • good
    • 6

エラー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くらいならエラーじゃなくてワーニング扱いだったかと思いますが。

対処は…メッセージに書かれているとおりでしょうかね。
難しい英文でもないので読んでくださいな。
    • good
    • 0
この回答へのお礼

失礼しました。調べてくださってありがとうございます。

お礼日時:2014/08/04 19:56

エラーの意味を聞きたいのなら「エラーが出てしまいます」というだけでなくそのエラーメッセージも書きましょう。



まあ、多分以下のページで話題になっていることだと思いますけど
http://dixq.net/forum/viewtopic.php?f=3&t=13793
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!