Arj*_*n C 17 c++ g++ command-line-arguments
我对cpp很新,我正在尝试做一个项目.它说代码必须以文件名作为参数,并将由以下代码运行:
./main -i filename
Run Code Online (Sandbox Code Playgroud)
我编写了一个for循环,它将遍历参数列表以找到"-i"参数,以便我可以确定文件名.但这一行总是返回false:
argv[i] == "-i"
Run Code Online (Sandbox Code Playgroud)
以下是我的代码:
#include <string>
#include <iostream>
int main(int argc, char *argv[]) {
std::string test = argv[0];
for(int i = 0; i < argc; i++){
if(argv[i] == "-i"){
test = argv[i+1];
break;
}
}
std::cout << test;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
Edg*_*jān 23
argv[i] == "-i"
Run Code Online (Sandbox Code Playgroud)
在上面的行中,您可以比较两个指针:char*和const char*.
换句话说,而不是比较,argv[i]和"-i"两个指针相比是几乎不可能指向同一个位置.因此,检查在您的情况下不起作用.
您可以通过多种方式解决这个问题,例如包装"-i"成std::string使比较正常工作:
const auto arg = std::string{ "-i" };
for(int i = 0; i < argc; i++){
if(argv[i] == arg){
test = argv[i+1];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
从C++ 17开始,您还可以使用std::string_view:
const std::string_view sv{ "-i" };
for(int i = 0; i < argc; i++){
if(argv[i] == sv){
test = argv[i+1];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一种更好的方式,因为它避免了std::string创作.
Swo*_*ish 17
您无法将指针与char使用的字符串文字(char const*)进行比较==.使用std::strcmp()(<cstring>)或从中构造一个std::string(<string>)使其与char*使用相媲美==.
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |