【问题标题】:C programming and argv (pointer arithmetic)C 编程和 argv(指针算法)
【发布时间】:2016-11-14 04:59:45
【问题描述】:

所以,我一直在研究这个简单的代码块。当我输入“./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*/
      }
}

【问题讨论】:

  • 你没有收到关于将char** 传递给char* 参数的警告吗?
  • 是的,我做到了。但是,我在这里看到您仍然可以使用 char*。所以,我只是忽略了它。

标签: c argv


【解决方案1】:

随便写

  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] );
}

【讨论】:

  • 我试过这个,但我仍然没有收到输出。我只需要输入命令提示符“./a.out -n”我写错了吗?
【解决方案2】:

试试:

#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 运行它。 因此,我检查了位置一上 argv 值的第 0 和第 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[]);

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 2022-01-17
    • 2011-04-01
    • 2013-06-19
    • 1970-01-01
    • 2018-04-05
    相关资源
    最近更新 更多