命令行选项
command line option
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (argv[1]=="-r") cout << "successn";
}
"成功"不会打印出来。当我运行时: $ ./hearts -r唯一出来的是:
-r
这让我很困惑
> 我会继续告诉你你不想要strcmp
.处理命令行参数C++方法是尽快将它们转换为std::string
:
int main(int argc, const char* argv[])
{
// Make a vector of all command-line arguments
std::vector<std::string> args(argv, argv+argc);
// Now we can use std::string's operator==
if (args.size() > 1 && args[1] == "-r") {
std::cout << "Success" << std::endl;
}
return 0;
}
您可以将两个std::string
与==
运算符进行比较。在 args[1] == "-r"
的情况下,const char[]
字符串文本被转换为std::string
进行比较。在您的代码中,argv[1]=="-r"
比较两个不相等的独立指针 - 它不比较 C 样式字符串的内容。
那是因为你在两个指针上使用==
。它将检查指针是否相等,而不是检查相同数据的点是否相等。
要比较两个 C 字符串,请使用如下所示strcmp
:
if (strcmp(argv[1], "-r") == 0)
您应该尝试使用:
if (strcmp(argv[1],"-r")==0) cout << "successn";
将参数与字符串文本进行比较。
您可能希望strcmp
比较这两个字符串。要使==
为真,您的两个字符串必须引用相同的内存位置,这不会发生,因为"-r"
是编译时常量。
您应该使用 strcmp()
,它将按预期工作。当您使用==
时,您可以比较指针,它们不能相同。
在 C 中,字符串是字符数组(指向字符序列的指针)。在您的代码中,相等运算符只是比较两个指针值,这两个指针值是完全不同的。你应该使用strcmp
函数,或者使用string
类:
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <cstring> // <-- here
using namespace std;
int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (strcmp(argv[1], "-r") == 0) // <-- and here
cout << "successn";
}
或
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <string> // <-- here
using namespace std;
int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (string(argv[1]) == "-r") // <-- and here
cout << "successn";
}
相关文章:
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 如何在 Boost Program_Options 中使用命令行和分层配置文件的选项
- GCC-7:错误:无法识别的命令行选项"-M64"
- C3193:__clrcall 需要提升标头上的 /clr 或 /ZW 命令行选项
- 是否有任何 MSBuild 命令行选项可以动态禁用 c++ 项目的代码分析?
- 从源代码构建Qt 5.8 - 配置:未知命令行选项'-c++11'
- 错误:生成Mesos中无法识别的命令行选项"-Wno无效源编码"[-Weror]
- 当我仅使用链接器选项 /LTCG时,为什么Visual Studio在Linker命令行中显示选项 /PGD
- gcc:错误:在 MacOSX 上构建 openjdk9 时'-mstack-alignment=16'无法识别的命令行选项
- 无法识别的命令行选项 '-WI'
- G-WAN cc1plus:错误:无法识别的命令行选项"-std=gnu++0x"
- 命令行选项
- 代码::封锁前构建选项与命令行(QT)不一致
- 使用提升程序选项通过配置文件/命令行解析自定义对象
- Netbeans 7.2 中 c++ "-std=c++11"无法识别的命令行选项
- 如何将命令行参数与c++中的选项一起传递给函数
- 从命令行调用Eclipse的格式化选项
- MinGW:错误:无法识别的命令行选项"-V"
- cc1plus:错误:使用 HXCPP "-stdlib=libstdc++"无法识别的命令行选项
- BOOST程序选项命令行的格式是什么?