C编程和argv(指针算术)

时间:2016-11-13 20:29:59

标签: c argv

所以,我一直在研究这个简单的代码块。当我输入“./a.out -n”

时,我想要打印

但是,这不起作用。我一直在使用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 个答案:

答案 0 :(得分: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] );
}

答案 1 :(得分:0)

尝试:

#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运行它。 所以,我已经检查了位置1上的argv值的第0个和第1个字符(&#34; ./ a.out&#34;位于位置0,&#34; -n&#34;位置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[]);