2015-06-29 3 views
0

Как эффективно перебирать переменную моих файлов?Как перебирать массив указателей символов

Следует ли добавить NULL в качестве моего последнего значения или сделать что-то еще?

char *files[] = 
     { 
      "c1.txt", 
      "r1.txt", 
      "t2.c", 
      "d.cpp", 
     }; 
+2

Вы можете, да. (Я бы добавил NULL, но не «NULL»). Или вы можете помнить, что этот список содержит 4 записи. Или вы используете 'sizeof (files)/sizeof (char *)'. И т. Д. –

+2

Каков ваш реальный вопрос? –

+1

Предположим, что «разобрать» означает «итерация», да, это один из вариантов. Это действительно проблема? – WhozCraig

ответ

1

Существует несколько возможностей.

  • Вы можете добавить NULL в качестве конечной записи, как вы предлагаете себя
  • Если массив приходит из другого источника (например, файл на диске), просто сохранить счетчик количества строк вы чтение
  • Но если массив дан в источнике, его длина постоянна, и вы можете просто проверить, сколько элементов имеют (путем вычитания номера строк)
  • Кроме того, размер постоянного массива sizeof(files)/sizeof(char*).
+0

Но обратите внимание, что если массив передается в качестве ** аргумента ** функции, аргумент массива с распадом на указатель, и вы больше не можете использовать 'sizeof files/sizeof * files' в функции. (Я знаю, вы знаете, это для OP) –

0

Вы также могли бы определить макрос, как

#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) 
... 
int i; 
for(i = 0; i < ARRAY_SIZE(files); i++) 
{ 
    printf("%s\n", files[i]); 
} 

это должно работать для любого вида массива, независимо от типа.

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