Вопрос о Quick C: Как знать длину символа* нечто []?
Спасибо.
Вы не можете. Не зная чего-то о том, что находится внутри указателей, или заранее не сохранив эти данные.
Если массив размещен статически, вы можете использовать функцию sizeof ()
. Так что sizeof (foo) / sizeof (char *)
подойдет.
Если массив был создан динамически, у вас проблемы! Длина такого массива обычно сохраняется явно.
РЕДАКТИРОВАТЬ:
janks, конечно, правильно, sizeof
- это оператор.
Также стоит отметить, что C99 допускает sizeof
для массивов переменного размера. Однако разные компиляторы реализуют разные части C99, поэтому следует соблюдать осторожность.
Вы имеете в виду количество строк в массиве?
Если массив был размещен в стеке в в том же блоке вы можете использовать трюк sizeof (foo) / sizeof (foo [0])
.
const char *foo[] = { "abc", "def" };
const size_t length = sizeof(foo)/sizeof(foo[0]);
Если вы говорите о argv
, переданном в main, вы можете посмотреть параметр argc
.
Если массив был выделен в куче или передан в функцию (где он распадался бы на указатель), вам не повезло, если только тот, кто его выделил, не передал вам размер.