ページ 1 / 1
scanfについて
Posted: 2010年4月24日(土) 00:09
by asdf
scanf("%d",a);
とやってもコンパイルは通ります。しかし,実行するとエラーが発生します。
このように、&を付け忘れたとき、どのようなことが起こっているのでしょうか。
最初、aをアドレスと認識し、そこに値を入れようとしたが、そのアドレスは有効なものではないためエラーが発生する・・・みたいな感じなのでしょうか。
よく分からないので、教えてください。
Re:scanfについて
Posted: 2010年4月24日(土) 00:51
by たかぎ
処理系も分からなければ、aの型も値も分かりません。これでは正確な回答は不可能です。
> 実行するとエラーが発生します。
どんなエラーが発生するのでしょうか?
Re:scanfについて
Posted: 2010年4月24日(土) 01:08
by asdf
すみません。いろいろと書き忘れていました。
例えば、このようなプログラムだと,強制終了されてしまいます。
int main(void) {
int a = 0;
scanf("%d",a);
return 0;
}
処理系は・・・具体的には何をかけばよいのでしょうか?
環境は、Windows7(32ビット)Borland C++ Compiler です。
Re:scanfについて
Posted: 2010年4月24日(土) 01:30
by たかぎ
これだと、
scanf("%d", NULL);
としたのと同じになります。
結果として、*(int*)NULLに代入しようとして異常終了してしまいます。
Re:scanfについて
Posted: 2010年4月24日(土) 01:43
by asdf
すみません。
*(int*)NULL
というのは何を表しているのでしょうか
Re:scanfについて
Posted: 2010年4月24日(土) 01:45
by たかぎ
早い話が、
int *p = NULL;
*p
と同じだと考えてよいでしょう。
Re:scanfについて
Posted: 2010年4月24日(土) 03:09
by asdf
なぜ、scanf("%d", NULL);としたのと同じになるのでしょうか。
また、
#include <stdio.h>
int main(void) {
int b;
scanf("%d",b);
printf("%d", b);
return 0;
}
としたら、実行結果は、
76
19014100
となりました。
この19014100とは何なのでしょうか。
Re:scanfについて
Posted: 2010年4月24日(土) 03:16
by たかぎ
> この19014100とは何なのでしょうか。
ゴミです。
Re:scanfについて
Posted: 2010年4月24日(土) 17:22
by asdf
???
ゴミですか・・・
具体的にはどういうものなのでしょうか?
Re:scanfについて
Posted: 2010年4月24日(土) 18:28
by KEYONN_
asdfさんへ
ゴミとは、多分、その実行したメモリのアドレスが使われる前の値だと思います。