2016-02-02 4 views
0

Я знаю, как можно было бы найти длину массива строк инициализируется таким образомНайти длину массива строк в форме char **?

char* arr[] = {"some", "thing"}; 

Просто сделай это,

size_t length = sizeof(arr)/sizeof(char*); 

И вы получите длину в 2, да? Но я предположил, что char ** - это то же самое, что и массив char *, как указано выше, и весь размер вещи не работает с ним (я хотя бы знаю, что это указатель на указатель). Я искал повсюду, пытаясь найти способ получить длину массива, хранящегося как char **, в отличие от char * [], но я чувствую, что недостаточно понимаю, как это сделать, даже хотя кажется, что это должно быть очень просто.

В моей программе, у меня уже есть символ ** массив со значениями в индексах 0 ... п, когда я пытаюсь получить, что длину используя путь выше, длина всегда 1.

Любой помощь?

+2

Если у вас нет дозорного, вы не можете. –

+0

вы собираетесь делать то, что всегда делали все остальные. Создайте структуру, которая отслеживает len при нажатии/нажатии. Вот пример, когда вы просто вызываете utarray_len. http://troydhanson.github.io/uthash/utarray.html –

+0

Вышеприведенный результат даст в результате '2'. Можете ли вы показать пример того, где он не работает, как вы ожидаете? – dbush

ответ

0

Там есть способ сделать это:

char* arr[] = {NULL, NULL, NULL}; 
printf("%d\n", sizeof(arr)/sizeof(*arr)); 

Это печатает 3. Однако существует проблема с этим подходом, но вы можете не знать об этом - он работает только в том случае, если размер arr известен как время компиляции - это означает, что точный размер предоставляется в квадратных скобках (и вы должны использовать константы вместо sizeof, тогда все равно), или список инициализации представлен как в обоих наших примерах (и я думаю, что это единственный законный случай sizeof с массивами). Если вы определяете массив любым другим способом, как arr2 ниже:

char** arr2 = arr; 

Он не будет работать, и будет вам 1, как вы говорите.

+0

@ M.M Спасибо, исправлено. Еще одна причина не использовать 'sizeof' бесполезно ... – TNW

Смежные вопросы