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。
我正在编写一个简单的程序,将 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。