#include <iostream>
using namespace std;
int main(int argc,char* argv[]){
if(argv[1] == ""){
cout << "please put something" << endl;
}else if(argv[1] == "string"){
cout << "yeah string" << endl;
}else if(argv[1] == "integer"){
cout << "yeah integer" << endl;
}
}
我不知道出了什么问题:我尝试检查为argv [1]提供的参数是否为空,因此它将是false
并且应用程序将退出,所以请告诉我我的代码中有什么问题。
答案 0 :(得分:7)
每个人都给你一个不同的答案。事实上,每个人都是对的。
main int main(int argc, char *argv[])
的签名是从C继承的。
在C字符串中是指向char
的指针。对它们使用运算符==
时,只比较指针值。
比较字符串内容的C方式是使用strcmp
。
if (strcmp(argv[1], "integer") == 0){
使用C ++方式更安全,更轻松。
if (std::string(argv[1]) == "integer"){
此行从argv[1]
创建临时std :: string。为此必须包含string
。
最后检查是否argc == 2
以了解是否提供了参数。
确实,standard 3.6.1的argv被null终止,但它肯定是
让事情更清楚,以确定argv确实等于2。
答案 1 :(得分:3)
如果您想用C ++编码,可以使用std::string
,包括其标题:
#include <string>
将第一个参数转换为std::string
并使用其operator==
:
std::string first = argv[1];
if(first == ""){
cout << "please put something" << endl;
}else if(first == "string"){
cout << "yeah string" << endl;
}else if(first == "integer"){
cout << "yeah integer" << endl;
}
char *
与字符串文字的比较没有意义,如果你从std::string
中创建一个argv[1]
,那么这是一个不同的故事,它将按预期工作。
但是,你应该首先检查用户提供给程序的参数数量,它位于argc
。
答案 2 :(得分:3)
不能使用==
作为char*
类型的argv [],而是使用strcmp。
int main(int argc, char*argv[])
{
if(argc == 1){
cout << "please put something" << endl;
}else if(strcmp(argv[1], "string") == 0){
cout << "yeah string" << endl;
}else if (strcmp(argv[1], "integer") == 0){
cout << "yeah integer" << endl;
}
return 0;
}
或者您需要将argv [1]的副本复制到std :: string,然后才能使用==
运算符。
答案 3 :(得分:1)
首先检查argc&gt; 1.否则,您正在访问无效的内存。
if(argc < 2){
cout << "please put something" << endl;
}else if(argv[1] == "string"){
cout << "yeah string" << endl;
}else if(argv[1] == "integer"){
cout << "yeah integer" << endl;
}
答案 4 :(得分:0)
#include <string>
#include <iostream>
这将使用c ++方式来比较字符串。更安全的方式。 将第一个参数转换为std :: string,然后使用string :: compare function
std::string inString = argv[1];
if(inString.compare("") != 0)
{
std::cout << "please put something in" << std::endl;
}
else if(inString.compare("string") == 0 ){
std::cout << "yeah you got a string" << std::endl;
}
else if(inString.compare("integer") == 0)
{
std::cout << "yeah you got an integer" << std::endl;
}
注意:使用string :: compare(字符串或指向字符串的指针),请参阅此函数的参考。字符串与您要比较的内容之间的关系:
0他们比较平等。如果比较产量&lt; 0,比较字符串中不匹配的第一个字符的值较低,或者所有比较的字符匹配但比较的字符串较短。如果&gt; 0,则比较字符串中不匹配的第一个字符的值更大,或者所有比较的字符匹配但比较的字符串更长。