2016-11-13 71 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); 

否则,你应该指定你要TP传递给函数的参数是什么。例如

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

尝试:

#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个字符(“./a.out”位于位置0,位置1上的“-n”)。 这就是你想要的吗?

而且,你不能忽视警告:

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