C++ 将 argv[1] 与具有相同值的 char 进行比较总是 returns False

C++ Comparing argv[1] with a char of the same value always returns False

我正在编写一个简单的程序,将 argv[] 中的单个字符与 char 数组中的字符进行比较。这是使用 for 循环检查 argv[1] 是否是字符数组中的任何字符来完成的,这是作为输入错误检查。

我为实现这一目标所做的工作如下:

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
    const char validCharacters[] = "abcde01234";
    int goodChars = 0;

    for (int i = 0; i < sizeof(validCharacters) - 1; i++) {
        if (strcmp(argv[1], &validCharacters[i]) == 0) {
            cout << "Characters match!" << endl;
            goodChars++;
        }
    }
    if (goodChars > 0) {
        cout << "Input OK!";
    }
    else {
        cout << "Invalid input!";
    }
    return 0;
}

我输入了“0”作为 argv[] 的值。 我在调试的时候,这个,发现strcmp(argv[1], &validCharacters[i]) returns -1,还有sizeof(argv[1]) returns 4.

为什么 argv[1] 的大小为 4,尽管只输入了 '0'? 我确定这就是我的程序无法运行的原因,我想知道是否有办法解决这个问题。

此外,我在 C++ 方面不是很有经验,所以如果你有什么不好的做法,请告诉我。

argv 是一个字符指针数组。为了比较和获取实际值的大小,您必须取消引用 char 对象。 例如,获取尺寸:

if(*argv[1] == '0'){
    // Do Something
} 

检查第一个参数(argv[0] 是命令本身)是否等于字符“0”。在这里,我取消引用 argv 数组索引 1 处的 char。