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;
}
此代码输出:
process
no
你知道为什么输出是 no 而不是 yes 吗?
顺便说一下,我尝试将它们中的任何一个转换为字符串并将其与另一个进行比较,令人惊讶的是它起作用了,尽管我不明白为什么。
argv[1]
是一个指针,实际上是一个 char *
(见定义 char *argv[]
),而在你的代码中 "process"
(这是一个 const char []
) 也会衰减为 const char *
,因此您基本上是在比较两个 char *
.
既然char *
只是简单的指针,那么你比较的是地址,而不是"string",显然argv[1]
和"process"
不是存储在同一个地址。
如果将两者之一转换为std::string
,则您正在比较std::string
和char *
(或const char *
),以及std::string
char *
有一个超载的 operator==
所以它有效。
您可以使用 strcmp
或 strncmp
.
比较 "C strings"(又名 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;
}
你好,我正在尝试读取一些参数并处理它们,但是当我尝试通过 if else 梯形图读取参数时出现问题
int main (int argc, char *argv[])
{
cout << argv[1] << endl;
if (argv[1] == "process")
cout << "yes" << endl;
else
cout << "no" << endl;
}
此代码输出:
process
no
你知道为什么输出是 no 而不是 yes 吗?
顺便说一下,我尝试将它们中的任何一个转换为字符串并将其与另一个进行比较,令人惊讶的是它起作用了,尽管我不明白为什么。
argv[1]
是一个指针,实际上是一个 char *
(见定义 char *argv[]
),而在你的代码中 "process"
(这是一个 const char []
) 也会衰减为 const char *
,因此您基本上是在比较两个 char *
.
既然char *
只是简单的指针,那么你比较的是地址,而不是"string",显然argv[1]
和"process"
不是存储在同一个地址。
如果将两者之一转换为std::string
,则您正在比较std::string
和char *
(或const char *
),以及std::string
char *
有一个超载的 operator==
所以它有效。
您可以使用 strcmp
或 strncmp
.
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;
}