0

概要: 私は最近、UNIX 端末で少し遊んでいて、"main" に引数を渡すと実際にどのように実行されるかをテストするために、小さな Objective-C アプリを作成することにしました。std=c99 を念頭に置いてアプリをビルドしました。

テスト: argv と argc に値をハードコーディングすると、すべて正常に動作するため、main の最初の数行から argv[0] と argv[1] を指定します。

問題: argv[0] と argv[1] をコメントアウトして unix 端末からアプリを実行すると、アプリは動作しません。そのため、端末が私が認識していない面白い文字を追加するかどうか疑問に思っています。 --

コードのスニペットを次に示します。 1. Dictionary は単なる構造体であることに注意してください。

    int main(int argc, char * argv[])
{
    //argv[0] = "prog";
    //argv[1] = "four";

    NSLog(@"request from: %s, entered string: %s, # of arguments: %i", argv[0], argv[1], argc);

    //argc = 2;
    if (argc >= 2)
    {
        if (translate(argv, argc));
        else
            NSLog(@"%s", "Unable to find request in dictionary");
    }
    else
        NSLog(@"insufficient arguments");

    return 0;
}

    BOOL translate(char * search[], int size)
{
    const int buffer = 6;
    Dictionary dic[] =
    {{"one", "1"},
        {"two", "2"},
        {"three", "3"},
        {"four ", "4"},
        {"five", "5"},
        {"six", "6"}
    };

    char * temp = search[size - 1];
    NSLog(@"temp value: %s", temp);

    int i = 0;
    for (; i < buffer; ++i)
    {
        char * temp2 = dic[i].num;
        NSLog(@"steped into for loop - with currect struct value: %s", temp2);

        if (temp == temp2)
        {
            NSLog(@"steped into if stamtement");
            NSLog(@"%s", dic[i].translate);
            return YES;
        }
    }

    return NO;
}
4

1 に答える 1

1

それでは最後にもう一度…

C は JavaScript ではなく、そのオペランドに対して数値比較を実行するため、を使用して文字列を比較することはできません。それ以外の====

if (temp == temp2)

あなたは書くべきです

if (strcmp(temp, temp2) == 0)

(そして、良い C チュートリアルを読み直してください - まともなチュートリアルには、そのような「トリッキーな」ものが確かに含まれています。)

于 2012-11-20T06:29:47.813 に答える