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

argvの値がNULLかどうかチェックしたいのですが
記述は以下で合っていますでしょうか?

int main(int argc, char *argv[]){
/* パラメタのNULLチェック */
if(strcmp(argv[1] == NULL) = 0){
printf(argv[1]はNULLです);
}
***********************************
上記の比較のように、argv[1] == NULL で出来ますか?
argv[1] == '\0' でしょうか?



}

A 回答 (4件)

> ↑間違ってますか?



間違っています。
argv[n]がNULLになるのは、argv[argc]だけです。
5個のパラメータが正しく入力されたかどうかを知るのであれば、

if (argc == (5 + 1))

とします。
argv[0]にはプログラム名が格納されます。また、環境によってはargcが0になることもありますので、その場合はargv[0]がNULLになります。
argv[argc + 1]以降は配列の外になりますので、その内容を参照することはできません。
    • good
    • 0

> if (argv[1] == NULL)


> if (argv[2] == NULL)
> if (argv[3] == NULL)
> if (argv[4] == NULL)
> if (argv[5] == NULL)
> とやれば、それぞれNULLかどうかのチェックできると
> いう事ですね!

一応はそうですが、たぶん何か誤解があると思います。
具体的に何をしたいのか補足してください。

この回答への補足

やりたい事は、シェルから渡されてくる5個の
パラメタを使って、Cモジュールで処理を行うのですが
変数に格納する前に、パラメタチェックを行ってから
(シェル側でもチェックしてる)宣言した変数にコピーして使いたいのです。

if (argv[1] == NULL){ /* パラメタのNULLチェック */
strcpy(atr1, argv[1]); /* 変数にコピーする */
}

↑間違ってますか?

補足日時:2008/01/22 00:40
    • good
    • 0

argv はプログラム名を含めたコマンドライン引数の配列へのポインタを保持しているので、NULL にはなりません。



argv[1] は(もしあれば)コマンドライン引数の文字列の先頭を指しているので、'\0' にはなりません。
argv[1] が NULL ということはプログラムが、引数なしで実行されたということです。

strcmp(argv[1] == NULL) は明らかに不正な呼び出しです。strcmp の関数宣言を確認して下さい。
    • good
    • 0

> 記述は以下で合っていますでしょうか?



間違っています。

argvの値がNULLかどうかをチェックするのであれば、

if (argv == NULL)

です。ただし、argvがNULLになるのは、(再帰呼出しを行うなど)自分でmainを呼び出した場合のみです。

argv[1]がNULLかどうかをチェックするのであれば、

if (argv[1] == NULL)

です。

この回答への補足

パラメタの数が5コあって、それぞれの値がNULLか
どうかチェックするのであれば、jactaさんが
教えてくれたように
if (argv[1] == NULL)
if (argv[2] == NULL)
if (argv[3] == NULL)
if (argv[4] == NULL)
if (argv[5] == NULL)
とやれば、それぞれNULLかどうかのチェックできると
いう事ですね!
ありがとうございます。

補足日時:2008/01/22 00:27
    • good
    • 0

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