次のような入力関数があります。
int func(char* s[])
{
// return number of rows in the character array s
}
ここで、char 配列 s は、たとえば {"sdadd", "dsdsd", "dsffsf", "ffsffsf"} のようにランダムに提供されます。
上記の例では、出力は 4 になります。
次のような入力関数があります。
int func(char* s[])
{
// return number of rows in the character array s
}
ここで、char 配列 s は、たとえば {"sdadd", "dsdsd", "dsffsf", "ffsffsf"} のようにランダムに提供されます。
上記の例では、出力は 4 になります。
C のすべての配列パラメーターと同様に、これを行う方法はありません。配列が渡されると、最初の要素へのポインターに減衰するためです (議論については、C FAQ、http://c-faq.com/aryptr/を参照してください)。関数パラメーターとして。
この場合はいつものように、2 つの可能性があります。
エンドマーカーを使用します。配列の要素型が、その型に対して「自然に」発生しない特別な値を保持できる場合、これは常に機能します。「\ 0」の文字の場合、NULL の配列のようなポインターの場合、null ポインター。たとえばargv[]
、 の 2 番目の引数main()
は、ヌル ポインターで終了します。これにより、反復が簡単になります。
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i=0; argv[i] != NULL; i++)
{
printf("%s\n", argv[i]);
}
return 0;
}
配列で長さ情報を渡します。興味深いことに、これは argc の情報であり、C ランタイムも に渡しますmain()
。
それを超えて、Cの関数にパラメーターとして渡される配列にいくつの要素があるかを知る方法はありません(または少なくとも移植可能な方法はありません)。
int size = sizeof(s)/sizeof(s[0]);
このステートメントは行います。変数 size には、 に存在する文字列の数が割り当てられます*s[]
。