scanfについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
asdf

scanfについて

#1

投稿記事 by asdf » 15年前

scanf("%d",a);

とやってもコンパイルは通ります。しかし,実行するとエラーが発生します。

このように、&を付け忘れたとき、どのようなことが起こっているのでしょうか。

最初、aをアドレスと認識し、そこに値を入れようとしたが、そのアドレスは有効なものではないためエラーが発生する・・・みたいな感じなのでしょうか。

よく分からないので、教えてください。

たかぎ

Re:scanfについて

#2

投稿記事 by たかぎ » 15年前

処理系も分からなければ、aの型も値も分かりません。これでは正確な回答は不可能です。

> 実行するとエラーが発生します。

どんなエラーが発生するのでしょうか?

asdf

Re:scanfについて

#3

投稿記事 by asdf » 15年前

すみません。いろいろと書き忘れていました。
例えば、このようなプログラムだと,強制終了されてしまいます。
int main(void) {
    int a = 0;
    scanf("%d",a);
    return 0;
}
処理系は・・・具体的には何をかけばよいのでしょうか?
環境は、Windows7(32ビット)Borland C++ Compiler です。

たかぎ

Re:scanfについて

#4

投稿記事 by たかぎ » 15年前

これだと、

scanf("%d", NULL);

としたのと同じになります。
結果として、*(int*)NULLに代入しようとして異常終了してしまいます。

asdf

Re:scanfについて

#5

投稿記事 by asdf » 15年前

すみません。
*(int*)NULL
というのは何を表しているのでしょうか

たかぎ

Re:scanfについて

#6

投稿記事 by たかぎ » 15年前

早い話が、

int *p = NULL;
*p

と同じだと考えてよいでしょう。

asdf

Re:scanfについて

#7

投稿記事 by asdf » 15年前

なぜ、scanf("%d", NULL);としたのと同じになるのでしょうか。
また、
#include <stdio.h>

int main(void) {
    int b;
    scanf("%d",b);
    printf("%d", b);    
    return 0;
}
としたら、実行結果は、
76
19014100
となりました。
この19014100とは何なのでしょうか。

たかぎ

Re:scanfについて

#8

投稿記事 by たかぎ » 15年前

> この19014100とは何なのでしょうか。

ゴミです。

asdf

Re:scanfについて

#9

投稿記事 by asdf » 15年前

???

ゴミですか・・・
具体的にはどういうものなのでしょうか?

KEYONN_

Re:scanfについて

#10

投稿記事 by KEYONN_ » 15年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る