2016-01-26 1 views
-3

Если у меня есть:Как индексировать через argv [1] в C?

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    int length = strlen(argv[1]); 

и ARGV [1] одно только слово, например, «привет», как я могу индексировать через него назад и распечатать по буквам?

Я попытался использовать strrev, но, по-видимому, это не в Linux, а вместо того, чтобы включать функцию, я бы скорее всего за цикл через argv [1] назад.

Я пробовал:

int i; 
for (i = length; i == 0; i--){ 

    printf("%c", argv[1][i]); 
} 

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

+2

Вы на правильном пути. Подумайте о том, как работает for for. – Stuart

+0

Ваша проблема не связана с argv [1]. – immibis

ответ

3

как я могу индекса через него обратную и распечатать по буквам

int i; 
for (i = strlen(argv[1]) - 1 ; i >= 0; i--){ 
    printf("%c", argv[1][i]); 
} 

Кроме того, вы, конечно, нужно #include <string.h> для строковых функций, связанных как strlen.

+0

Ahh, поэтому argv [1] [i] был прав! Благодаря! – Austin

+2

Когда вы считаете это так, убедитесь, что ваша переменная не является неподписанным, иначе она никогда не закончится. (Легче забыть, чем вы могли бы подумать.) – e0k

1

Функция strlen возвращает количество символов в массиве/строки, однако, последний элемент не будет возвращаемое значение, а length = strlen(argv[1]) - 1

Также я считаю, с петлей for вы имели в виду:

for (i = length; i >= 0; i--){ //Note the change of i==0 to i >= 0 
1

Хотя принятый ответ несколько в порядке, это не должно оставаться таким.

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    int length = strlen(argv[1]); 

Это неверно на 3 счета:

  1. нет проверки, есть ли ARGV [1], в первую очередь, предпочтительно фиксируется, убедившись ARGC == 2
  2. StrLen используется , но string.h не входит. вы уверены, что компилируете с включенными предупреждениями?
  3. несколько стилистическое, но все же важное замечание состоит в том, что если вы собираетесь использовать argv более одного раза (и вы есть), строка должна быть где-то сохранена. в общем, вы не хотите полагаться на argv или argc после начальной стадии анализа аргументов
+0

Для # 2, что это значит, если я получу предупреждение, но он все еще работает? – Austin

+0

Это означает, что вы играете с огнем, и если он бежит, вам повезло. Технический ответ слишком вовлечен, чтобы включить сюда, и я не знаю никакой хорошей связи. Просто убедитесь, что вы всегда компилируете предупреждения и исправляете их. В противном случае вы настроитесь на впечатляющий провал. –