2016-04-18 19 views
-2

私はシェルを作成して使用するプロジェクトに取り組んでいます。 "| executable | -p | prompt |はユーザーがユーザー定義のプロンプトを選択できるようにすべきです。そうでない場合、デフォルトは" 257sh> "にする必要があります。私はargv [1]を印刷するときに、 "-p"を出力します。これは、コードが正常に動作していないために発生します。あなたがargv[1] == "-p" Yを行うと(何のI入力thatsの場合)。ここに私のシェル関数がある。Cの文字列と文字列ポインタを比較すると同等です

void shellLoop(char *n) 
{ 
    char *line; 
    char **args; 
    int status; 
    char name = n; 

    do{ 
     printf("%s>", n); 
     line = sysReadLine(); 
     args = splitLine(line); 
     status = execute(args); 

     free(line); 
     free(args); 
    }while(status); 
} 

そして、ここには私の主な機能は、

int main(int argc, char *argv[]) 
{ 
    if(argc == 3 && argv[1] == "-p"){ 
     shellLoop(argv[2]); 
    } 
    else{ 
     shellLoop("257sh"); 
    } 

    return EXIT_SUCCESS; 
} 
+3

argv [1] == "-p" ':Cでは' == 'の代わりに' strcmp'を使用します。 – BLUEPIXY

答えて

2

です2つのポインタと、決して同じではない2つのポインタを比較してください。

Cの文字列を比較するには、strcmp関数を使用します。strcmp(argv[1], "-p") == 0

1

また、strncmp(char * str1、char * str2、int n)を使用して、2つの文字列の最初のnバイトを比較することもできます。

+0

"また"は実際の方法が実際に動作することを意味します。そして、両方の文字列が 'ヌル'で終わることが保証されているので、 'strncpy'は必要ありません。 – Olaf