2016-11-13 15 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 **を '渡しに関する警告を取得しないでくださいする必要がありますchar * 'パラメータ? – aschepler

+0

はい、しました。しかし、私はここでもchar *を使用できることを見ました。だから、私はそれを無視しました。 –

答えて

0

だけ

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

を書き、関数はそれ以外の場合は、あなたが関数に渡すtpは起こっているかのパラメータを指定する必要があり

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

のように宣言する必要があります。

#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でそれを実行します。例

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

試しに合格しているかどうか確認することができます。 したがって、私は位置1( "./a.out"は位置0に、 "-n"は位置1にあります)のargv値の0番目と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_cmdlinevoid parse_cmdline(int argc, char *argv[]);

関連する問題