ページ 11

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さんへ
ゴミとは、多分、その実行したメモリのアドレスが使われる前の値だと思います。