C++参数比较
C++ arguments comparison
你好,我正在尝试读取一些参数并处理它们,但当我尝试通过if-else梯形图读取参数时,出现了问题
int main (int argc, char *argv[])
{
cout << argv[1] << endl;
if (argv[1] == "process")
cout << "yes" << endl;
else
cout << "no" << endl;
}
该代码输出:
处理
无
你知道为什么输出是no而不是yes吗?
顺便说一句,我试图将它们中的任何一个转换为字符串,并将其与另一个进行比较,结果令人惊讶,尽管我不知道为什么
argv[1]
是一个指针,实际上是一个char *
(请参阅定义char *argv[]
),在您的代码中,"process"
(即const char []
)也衰减为const char *
,因此您基本上是在比较两个char *
。
由于char *
只是指针,所以您比较的是地址,而不是"字符串",显然argv[1]
和"process"
不是存储在同一地址。
如果将两者中的一个转换为std::string
,则比较的是std::string
和char *
(或const char *
),而std::string
的char *
具有过载的operator==
,因此可以正常工作。
您可以使用strcmp
或strncmp
来比较"C字符串"(也称为char
数组)。
argv[1] == "process"
比较指针。使用strcmp
比较指针后面的字符串:
#include <string.h>
int main (int argc, char *argv[])
{
cout << argv[1] << endl;
if (strcmp(argv[1],"process")==0)
cout << "yes" << endl;
else
cout << "no" << endl;
}
相关文章:
- 没有默认构造函数作为模板参数的自定义比较器
- C++复杂情况的比较器通过参数问题
- 为什么 std::stable_sort() 的比较函数的参数必须是设置常量?
- C++模板参数之间的比较似乎被忽略了
- 在C++排序中为比较函数指定参数
- 在c++中隐藏不同的std::map比较参数
- 为什么比较函数类型需要指定为模板参数?
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 如何将参数传递到自定义比较C 中分类的函数
- 比较优先队列中的参数
- C++函数来返回基于参数的比较器通用映射类型?
- find_if中的模板比较器作为第三个参数
- 与自定义比较函数作为模板参数的编译器错误
- C++ 比较命令行参数与 strcmp
- 带有额外参数的排序列表以进行比较功能
- 当参数相等时,为什么必须std :: sort比较函数返回false
- c++omp,比较参数和常量
- 比较参数包?扩展语法
- std::map 的比较参数对严格排序有什么要求?
- x86 程序集比较参数