2016-03-27 3 views
0

Если у меня есть char **args, как я могу прокручивать строки из массива, чтобы определить, сколько их есть?Итерация через указатель на указатели

Например, если char **args == {"one", "two", "three"}, как я могу проходить через каждый элемент, сохраняя счет, а затем возвращать 3?

ответ

0

Поскольку ваш args не имеет нулевого значения, просто напишите

int i; 
for (i = 0; args[i]; i++) 
    // do something 
-1

Вы можете получить такой же размер во время компиляции, как показано ниже.

Это один из способов перебора массива строк.

char* args[] = {"one", "two", "three"}; 

char** p = args; 

size_t len = sizeof(args)/sizeof(*args); 

for (int i = 0; i < len; ++i) { 
    printf("item %u = %s\n", i, *p++); 
} 

[EDIT]

я понял, это, кажется, вы имеете в виду арг в командной строке (которая заканчивается нулем);

В этом случае вы можете использовать:

int main(int argc, char** argv) { 
    char** p = argv; 
    int count = 0; 
    while (*p) 
     printf("item %u = %s\n", count++, *p++); 
} 

или даже

int main(int argc, char** argv) { 
    int count = 0; 
    while (*argv) 
     printf("item %u = %s\n", count++, *argv++); 
} 

Примечания Вы напечатаете ARGV [0] в приведенном выше случае. Адаптируйте к вашим потребностям.

Конечно, в этом случае у вас также есть argc, поэтому вы можете перебирать до тех пор, пока i < argc. Ваш вопрос непонятен. Вы должны предоставить полный код в своем вопросе.

+0

Обратите внимание, что это работает только для массива указателей и не работает для указателя на указатели. –

-2

Попробуйте следующий код:

int count=0; 
while(*args++)count++; 

printf(" %d\n",count); 

в то время как петля должна прекратить, когда он достигает конца массива строк, однако, было бы лучше иметь:

char strAry[M][N]="…your initialization…"; 
**args; 

args=strAry;