2016-10-12 17 views
0

私はこのコードブロックに遭遇しました。私は何を理解したいのですか? args[0][0]-'!'を意味しますか?私はargs [0] [0] - '!'手段

else if (args[0][0]-'!' ==0) 
{ int x = args[0][1]- '0'; 
    int z = args[0][2]- '0'; 

    if(x>count) //second letter check 
    { 
    printf("\nNo Such Command in the history\n"); 
    strcpy(inputBuffer,"Wrong command"); 
    } 
    else if (z!=-48) //third letter check 
    { 
    printf("\nNo Such Command in the history. Enter <=!9 (buffer size  is 10 along with current command)\n"); 
    strcpy(inputBuffer,"Wrong command"); 
    } 
    else 
    { 

     if(x==-15)//Checking for '!!',ascii value of '!' is 33. 
     { strcpy(inputBuffer,history[0]); // this will be your 10 th(last) command 
     } 
     else if(x==0) //Checking for '!0' 
     { printf("Enter proper command"); 
      strcpy(inputBuffer,"Wrong command"); 
     } 

     else if(x>=1) //Checking for '!n', n >=1 
     { 
      strcpy(inputBuffer,history[count-x]); 

     } 

    } 

このコードはgithubのアカウントからのものである:https://github.com/deepakavs/Unix-shell-and-history-feature-C/blob/master/shell2.c

+0

args [0] [0] 'はargs配列の最初の文字列の最初の文字なので、 '!'のASCIIコードを引いています。それから – bruceg

+0

これは、ASCIIの内容についての質問です。 –

+0

最初の引数 'argv [0]'は通常、実行可能ファイル名そのものです。しかし、AFAIK 'exec **'関数はプログラム引数を渡さないので、このような使い方になる可能性があります。ありがとう。 –

答えて

3

argsは、ストリング(文字列)のアレイ、char**、または他の言葉です。だから、:!文字でargs開始の最初の文字列ならば

つまり
args[0]    // first string in args 
args[0][0]   // first character of first string in args 
args[0][0]-'!'  // value of subtracting the character value of ! from 
        // the first character in the first string in args 
args[0][0]-'!' == 0 // is said difference equal to zero 

、それがチェックされます。それは(と間違いなく必要があります)

args[0][0] == '!' 

のと同様のように書き換えることができます(ただし、このいずれかを使用していない)

**args == '!' 
3

'!'は数値だけのテキスト表現であります感嘆符を指定されたエンコーディングでエンコードする値。 args[0][0]は、配列の最初の要素の最初の文字です。

だからx - y == 0?反対側にyを移動すると、x == yとなるので、コードはargs[0][0] == '!'に相当します。

この例では、等価を減算として表現することは実際にはありません。

関連する問題