2016-09-30 5 views
0

私はマップを使用してCPPでプログラムを記述しようとしています...レア行動

私の目標は、我々はCOMANDライン引数

を経由して渡すと私は制限する必要があるときのみ*できるようにすることです私は次の出力

を得て、このプログラムを実行すると、文字は*(IE) ABCとabcの

int main(int argc,char *argv[]) 
{ 
    prinf("%s\n",argv[1]); 
    char str[256] = ""; 
    int length; 
    strcpy(str,argv[1]); 
    length = strlen(str);  
    if((str[0] = '*')&& (length == 1)) 
     printf("success\n"); 
    else 
     printf("failure"); 
    return 0; 

} 

と一緒に来て

のargv [1] = 1であるため、入力引数として取得*ない

故障(1の代わりに*を印刷する)、それは失敗になります。

誰かがこの問題を解決するのに役立つでしょうか?

+0

"cpp"は "c"ではないことをご存知でしょうか? –

+0

とにかく 'length'とは何ですか? –

+0

' length'とは何ですか?[最小限の、完全で検証可能な例](http:// stackoverflow。 –

答えて

3

コマンドライン上の項目は、シェルによって処理されます。シェルで

は、*は、一般的にはglob操作

を行い、globオペレータは、一人で立ったときに、現在のディレクトリ内のすべてのファイルのリストになります。

+1

そして、修正プログラムは './prog '*' 'や' ./prog "*" 'のようにプログラムを実行することです。または './prog \ *'。最初のものを使用します。 –

3

文字*は、ほとんどのシェルで特別な意味を持ちます。あなたのシェルは、それをカレントディレクトリのファイルに展開して、意図した引数とはまったく異なる引数になります。これを避けるために

、あなたが行うことができます:

$ ./exec "*" 

または

$ ./exec '*' 

をお使いのシェルがbashのであれば、あなたもでグロブ拡張をオフにすることができます

$ set -o noglob 

または

$ set -f 

しかし、私はこれまでのオプション(上記)を「最小限」として推奨し、そうでない場合はシェルのデフォルト動作に影響を与えません。