質問

私は、テストの場合とこだわっているシンプルな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

私はきちんと私が対処したい行の範囲を確認するために何ができるのでしょうか?

役に立ちましたか?

解決

もちろんそれは動作しません:argvcharへのポインタへのポインタ..ですあなたが行うが、その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 */
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top