プロが教える店舗&オフィスのセキュリティ対策術

int a;  で整数の変数 a を宣言したとします。

ここで a になにも操作を加えなかったら、aは空っぽのままですよね?

a の中身が空っぽかどうかを調べるにはどのようにすればよいのでしょうか?

例えば、整数aの中身を調べて、何か代入されていればそれを表示し、なにもない空っぽであればエラーを表示し終了するプログラムを書こうと思えばどのようにかけばよろしいのでしょうか?

main()
{
int a;

・・・・

if (■■)
{
printf("Error!\n");
exit(1);
}

printf("a = %d\n",a);

この if の■■に書くべきことを教えてください。

A 回答 (5件)

C言語において空っぽの値というものはありません。


(C++なら別ですが)

C言語で変数を宣言した場合、その変数の型に必要な分だけの
メモリが確保され、変数に割り当てられます。
(例:int型なら4バイト、double型なら8バイト)
そして、確保したメモリにもともと何が入っていても特に処理をしません。
言い換えると他のプログラムなどが使っていたデータ等、予想できないものが
変数に入ることになります。
したがって、int a;と宣言しただけのaの中身はプログラムを実行するたびに変わるため
意味のないものとなります。

もし、「aに値が代入されていなければエラー」のような処理をしたいのであれば
int a = INT_MAX; // INT_MAXは最近のプログラムなら2147483647
 ・
 ・
 ・
if(a == INT_MAX)
{
(void)printf("Error.\n");
exit(EXIT_FAILURE);
}

printf("a = %d\n", a);

のようにaにはまず入らないであろう値を予め代入しておくのが良いと思います。
    • good
    • 0
この回答へのお礼

なるほど、宣言しただけの段階ではメモリに以前はいっていたものがそのままのこる場合があり、そのための初期化というものがあるのですね
大変勉強になりました。
ありがとうございます。

お礼日時:2012/01/05 17:06

うぅ~ん, そもそもだけど「なんでそんなことをしたいのか」が分からん.



まあ, 「方法」もないんだけど.
    • good
    • 0

>この if の■■に書くべきことを教えてください。



書くべき事はありません。

通常「未初期化の変数を参照する行為」は許されません。

コンパイラによっては「未初期化の変数を参照している」として、コンパイル時にワーニング(警告)が出ます。

つまり「そんな事は出来ない」し「やっちゃいけない」のです。

因みに、未初期化の変数を参照した場合、値は不定です。
    • good
    • 0

空っぽではなく,


int 分のメモリを消費しています.
a にはなんか,値が入っています.
普通は,a のために確保したメモリに元から入っていたバイナリを
int に変換した値が入ります.

一部のコンパイラでは,0 に初期化する場合もあります.

よってこれでは無理.
    • good
    • 0
この回答へのお礼

なるほど、宣言しただけの段階ではメモリに以前はいっていたものがそのままのこる場合があり、そのための初期化というものがあるのですね
大変勉強になりました。
ありがとうございます。

お礼日時:2012/01/05 17:07

Cは変数宣言しただけのときの中身を保証していません。


なので中身を入れてないものを参照するとコンパイラによってはウォーニングが出ると思いますし、実行しても正しく実行されません。
どこかで、プログラマが、その値が入らないような値を先に入れておくことが必要です。

ただ、コンパイラによってはNULLが入っているものもあるようです。
    • good
    • 0
この回答へのお礼

なるほど、勉強になりました。
また別の方法を考えてみようと思います。
ありがとうございました。

お礼日時:2012/01/05 17:07

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