如何将argv与元素数组进行比较?

时间:2016-03-22 18:02:15

标签: c arrays

我试图查看我创建的密钥数组是否包含来自argv的命令行参数,但我一直收到错误:

"incompatible pointer types passing 'char **' to parameter of type 'const char *';"

我怎么能比较代码中找到的这两个参数呢?

char *scale_array[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"};

    for (int i = 0; i < (sizeof(scale_array) / sizeof(char)); i += 1) {
        if (strcmp(argv, scale_array[i]) == 0) {
            printf("Found it!");
        }
        else {

        }

2 个答案:

答案 0 :(得分:1)

char *scale_array[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"};

for (int i = 0; i < (sizeof(scale_array) / sizeof(char)); i += 1) {
    if (strcmp(argv[1], scale_array[i]) == 0) {
        printf("Found it!");
    }
    else {

    }

假设您的单个命令行参数位于argv[1]中,这是通常的情况。

请记住,argv是指向字符数组的指针的向量。

答案 1 :(得分:1)

您没有正确使用argv来访问命令行输入字符串。 此外size of array必须像这样确定(在您的情况下)

(sizeof(scale_array) / sizeof(char*))

以下是具有多个命令行输入的修改代码。

int main(int argc, char** argv)
{
    char *scale_array[] = {"A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#"};
    int j = 1;
    for (int i = 0; i < (sizeof(scale_array) / sizeof(char*)); i++)
    {
        if (strcmp(argv[j], scale_array[i]) == 0)
        {
            printf("Found it! %s \n", argv[j]);
            j++;    
            i = -1;
        }

        if(j == argc)
        {
            break;
        }
    }
    return 0;
}

希望这有帮助。