3

私は現在 C を学んでおり、文字列の配列を反復処理する方法に苦労しています。
次のように、配列を定義するとしましょう。

char* argv_custom[] = {"--debug", "--verbose", "--test", "--ultimate"};

では、argv_custom 内の文字列の数を決定するにはどうすればよいでしょうか? (例: argc_custom)
そもそもこれについて正しい方法をとっていますか? また、次のようなことは可能ですか?

疑似コード

if ('--debug' in argv_custom) { // do stuff }
4

3 に答える 3

10

では、argv_custom 内の文字列の数を決定するにはどうすればよいでしょうか?

標準的な方法:

int argc_custom = sizeof(argv_custom) / sizeof(argv_custom[0]);

注:これは配列自体でのみ機能し、ポインターを取得するとすぐに(関数に渡す場合などargv_custom)、機能しなくなります:

char **p = argv_custom;
int argc_custom = sizeof(p) / sizeof(p[0]);  // No me gusta

次のようなことは可能ですか: ...

近道はありません。各文字列を反復処理して、strcmp. もちろん、この動作を関数にラップすることもできます (おそらくそうすべきです)。

于 2012-06-18T00:29:46.173 に答える
3

できますsizeof(argv_custom)/sizeof(argv_custom[0])。これは、配列の全長を各要素のサイズで割った値を計算します。

于 2012-06-18T00:29:46.833 に答える
-1

私はこの質問を何度も受けましたが、私のお気に入りの解決策は、ポインターを まで反復することnullです。 sizeof関数を使用して配列を渡し始めるとすぐに動作を停止します。

これは、私が課題で何度も使用してきたパラダイムであり、非常に役に立ちました。cstringa の長さを取得したり、その文字を反復処理したりするために、まったく同じことを使用できます。

char* argv_custom[] = {"--debug", "--verbose", "--test", "--ultimate"};
char **temp = argv_custom;
int size = 0;
while (*temp) {
    ++size;
    ++temp;
}

これは を使用するよりも優先されませんがsizeof、ループしたい場合の代替手段です。

于 2016-05-18T07:35:12.757 に答える