2016-11-13 105 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[]);