Как получить длину символа **?

Вопрос о Quick C: Как знать длину символа* нечто []?

Спасибо.

5
задан nunos 8 April 2010 в 16:09
поделиться

3 ответа

Вы не можете. Не зная чего-то о том, что находится внутри указателей, или заранее не сохранив эти данные.

11
ответ дан 18 December 2019 в 08:27
поделиться

Если массив размещен статически, вы можете использовать функцию sizeof () . Так что sizeof (foo) / sizeof (char *) подойдет. Если массив был создан динамически, у вас проблемы! Длина такого массива обычно сохраняется явно.

РЕДАКТИРОВАТЬ: janks, конечно, правильно, sizeof - это оператор.

Также стоит отметить, что C99 допускает sizeof для массивов переменного размера. Однако разные компиляторы реализуют разные части C99, поэтому следует соблюдать осторожность.

2
ответ дан 18 December 2019 в 08:27
поделиться

Вы имеете в виду количество строк в массиве?

Если массив был размещен в стеке в в том же блоке вы можете использовать трюк sizeof (foo) / sizeof (foo [0]) .

const char *foo[] = { "abc", "def" };
const size_t length = sizeof(foo)/sizeof(foo[0]);

Если вы говорите о argv , переданном в main, вы можете посмотреть параметр argc .

Если массив был выделен в куче или передан в функцию (где он распадался бы на указатель), вам не повезло, если только тот, кто его выделил, не передал вам размер.

6
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: