C言語の初心者です。
Visual Studio 2015 Community を使って学習しています。
C言語の入門書を用いてサンプルプログラムを実行しています。
文字入力のサンプルプログラムを実行すると以下のようにエラーが出ます。
インターネットによると、「意図しないメモリ領域に書き込んだのだろう」ということがありましたが、見直してもよくわかりませんでした。
また、"paiza.io" にて scanf_s を scanf にすると問題なく実行できます。
何が起きておりどのように対策をすればよいかを教えてください。
本のサンプルプログラムなので投稿してよいのか迷いましたが、
短いですし、基礎的なことだと思うので投稿しました。
0x0F30D0F1 (ucrtbased.dll) で例外がスローされました (C言語の学習用.exe 内): 0xC0000005: 場所 0x00121041 への書き込み中にアクセス違反が発生しました ハンドルされない例外が 0x0F30D0F1 (ucrtbased.dll) で発生しました(C言語の学習用.exe 内): 0xC0000005: 場所 0x00121041 への書き込み中にアクセス違反が発生しました。
以下がプログラムリストです。
C
1#include "stdafx.h" 2int main() 3{ 4 int num; 5 double dnum; 6 char ch0, ch1, ch2; 7 char str[81]; 8 9 printf("整数を入力:"); scanf_s("%d", &num); 10 printf("実数を入力:"); scanf_s("%lf", &dnum); 11 printf("英字1文字と改行入力:"); scanf_s("%c%c%c", &ch0, &ch1, &ch2); 12 printf("英文字列と改行入力:"); scanf_s("%s", str); 13 14 printf("[%d]です\n", num); 15 printf("[%f]です\n", dnum); 16 printf("[%c][%c][%c]\n", ch0, ch1, ch2); 17 printf("[%s]\n", str); 18 19 printf("プログラムを終了するには何かキーを押してください...\n"); 20 char x; 21 scanf_s("%c", &x); 22 return 0; 23}
追記
遅くなりましたが、この本の意図していることを正確にするため、本にある実行結果と説明を簡単に書きます。
整数を入力:100 実数を入力:3.14159 英字1文字と改行入力:A 英文字列と改行入力:XYZ [100]です [3.14159]です [ ][A][ ] [XYZ]
本では、説明として
1 0 0 改行 3 . 1 4 1 5 9 改行 A 改行 X Y Z 改行
↑P1______ ↑P2_________ ↑P3 ※(追記)矢印がずれていたので直しました。
となるから状態によっては前の scanf で読み取った改行が次に読み込まれてしまう
といった内容です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/19 07:19
2016/08/19 07:25
2016/08/19 07:33
2016/08/19 08:31
2016/08/19 09:02
2016/08/19 09:08
2016/08/19 09:42
2016/08/19 09:47
2016/08/19 09:48
2016/08/19 09:50
2016/08/19 09:58
2016/08/19 14:07
2016/08/20 01:41