我试图查看我创建的密钥数组是否包含来自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 {
}
答案 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;
}
希望这有帮助。