コマンドライン引数と範囲を確認します
-
18-09-2019 - |
質問
私は、テストの場合とこだわっているシンプルなCプログラムでの作業
int line_number = 0;
if ((line_number >= argv[2]) && (line_number <= argv[4]))
gccが言います:
cp.c:25: warning: comparison between pointer and integer cp.c:25: warning: comparison between pointer and integer
私はきちんと私が対処したい行の範囲を確認するために何ができるのでしょうか?
解決
もちろんそれは動作しません:argv
はchar
へのポインタへのポインタ..ですあなたが行うが、そのargv[2]
について考えたいことは明らかではありません三番目のパラメータとargv[4]
は5回目です。しかし、彼らはchar*
タイプ(彼らは文字列である)であるので、あなたは整数としてそれらを解析したい場合は、関数atoi
を使用してそれを行う必要があります:
int value = atoi(argv[2]);
そして、あなたが欲しいものは何でも確認することができ、第三パラメータとしてだったint型を解析し、変数にそれを配置します。
他のヒント
あなたは、関数atoi
を使用すべきではありません。事実ならば、あなたはそれが今まで存在していたことを忘れなければなりません。これは、実用的な用途がありません。
ジャックの答えはargv
文字列が(特に入力が「外の世界」から来ている状況で)その目的のためにatoi
を使用して、最初の数値に変換する必要があることを示すで正しいですが、Cプログラミングに対する犯罪です。 atoi
は有意義プログラムで使用することができますほとんどない状況があります。
この場合には使用されなければならない機能がstrtol
である
char *end;
long long_value = strtol(argv[2], &end, 10);
if (*end != '\0' || errno == ERANGE)
/* Conversion error happened */;
(*end == '\0'
を必要とするかどうかなど)正確なエラーチェックの状態が実際にあなたの意思に依存します。
あなたが最後にint
を取得したい場合は、あなたもint
範囲の値をチェックする必要があります(またはアプリケーション固有の範囲のための)
if (long_value < INT_MIN || long_value > INT_MAX)
/* Out of bounds error */;
int value = long_value;
/* This is your final value */
所属していません StackOverflow