Как узнать длину символа **? - PullRequest
5 голосов
/ 08 апреля 2010

Быстрый вопрос c: Как узнать длину символа * foo []?

Спасибо.

Ответы [ 3 ]

11 голосов
/ 08 апреля 2010

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

6 голосов
/ 08 апреля 2010

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

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

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

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

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

2 голосов
/ 08 апреля 2010

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

EDIT: Дженкс, конечно, прав, sizeof - оператор.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...