2016-11-13 2 views
-3

Итак, я работал над этим простым блоком кода. Я хотел бы, чтобы он печатал, когда я печатаю «./a.out -n»C программирование и argv (арифметика указателя)

Однако это не работает. Я был на stackoverflow, пытаясь работать над этим, но такой удачи не было. Любая помощь будет оценена по достоинству.

#include <stdio.h> 
#include <stdlib.h> 
void parse_cmdline(int argc, char *argv); 
int main (int argc, char *argv[]) { 
    parse_cmdline(argc, argv); 
} 

void parse_cmdline(int argc, char *argv) 
{ 
    int x,i,m,n = 0; 
    if (*(++argv) == 'n'){ 
     x = 1; 
     printf("Output array: "); /* not being displayed*/ 
     } 
} 
+2

Не вы получите предупреждение о передаче '' символ ** к ' char * 'параметр? – aschepler

+0

Да, я это сделал. Но я видел здесь, что вы все еще можете использовать char *. Поэтому я просто проигнорировал это. –

ответ

0

Просто напишите

if (**++argv == 'n'){ 

И функция должна быть объявлена ​​как

void parse_cmdline(int argc, char **argv); 

В противном случае вы должны указать, какой параметр вы собираетесь тп помещаемые в функцию. Например

parse_cmdline(argc, argv[1]); 

Вы можете проверить, какие параметры передаются в программу следующим образом

int main (int argc, char *argv[]) { 
    for (int i = 0; i < argc; i++) puts(argv[i]); 
} 
+0

Я пробовал это, но я до сих пор не получаю выход. Все, что мне нужно ввести в командной строке "./a.out -n" Я пишу это неправильно? –

+0

@KingKong Смотрите мой обновленный пост. –

0

Try:

#include <stdio.h> 
#include <stdlib.h> 

void parse_cmdline(int argc, char *argv[]); 

int main (int argc, char *argv[]) { 

    parse_cmdline(argc, argv); 
} 

void parse_cmdline(int argc, char *argv[]) 
{ 
    int x,i,m,n = 0; 
    if (*(argv[1]) == '-' && *(++argv[1]) == 'n'){ 
     x = 1; 
     printf("Output array: "); /* not being displayed*/ 
     } 
} 

И запустить его с ./a.out -n. Итак, я рассмотрел 0-й и 1-й знаки значения argv в позиции 1 («./a.out» находится в позиции 0 и «-n» в позиции 1). Это то, что вы хотели?

Кроме того, вы не можете игнорировать предупреждения:

1.c: In function ‘main’: 
1.c:5:23: warning: passing argument 2 of ‘parse_cmdline’ from incompatible pointer type [-Wincompatible-pointer-types] 
    parse_cmdline(argc, argv); 
        ^
1.c:3:6: note: expected ‘char *’ but argument is of type ‘char **’ 
void parse_cmdline(int argc, char *argv); 

Если вы пишете parse_cmdline(argc, argv); то parse_cmdline должен быть void parse_cmdline(int argc, char *argv[]);

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