提问人:Masoshi 提问时间:10/5/2023 最后编辑:Masoshi 更新时间:10/5/2023 访问量:79
在 C++ 中使用双引号作为命令行参数时出现问题
Problem using double quotes as commandline argument in C++
问:
我正在尝试做一个程序,将“-m”检测为消息的参数,并在消息本身之间使用双引号。现在我只是试图检测消息是否以双引号开头,但我得到了一个意外的行为。
主要功能:
int main(int argc, char *argv[]){
if (argc < 3){
std::cerr << "Error! Bad usage of parameters" << std::endl;
return 1;
}
for (int i = 1; i < argc - 1; i++){
std::string arg = argv[i];
std::string nextarg = argv[i+1];
if(arg == "-m"){
if(nextarg.empty() || nextarg[0] != '"'){
std::cout << "nextarg[0]: " << nextarg[0] << std::endl;
std::cout << "arg: " << arg << std::endl;
std::cerr << "Error, message must be on double quotes" << std::endl;
return 1;
}
else {
std::cout << "The code worked" << std::endl;
std::cout << nextarg << std::endl;
std::cout << arg << std::endl;
}
return 0;
}
else{
std::cerr << "The value is invalid." << std::endl;
return 1;
}
}
}
现在,我使用的输入是 ,预期的输出是:./compiled -m "foo foo"
The code worked
"foo foo"
-m
但实际输出是:
nextarg[0]: f
arg: -m
Error, message must be on double quotes
所以,我看到的问题可能是我的程序没有检测到第一个双引号。此外,如果我只使用一个双引号,输出会形成一个无限循环的“>”,要求我输入,我不希望在我的程序中出现这种行为。
顺便说一句,我不知道为什么,但是如果我使用这个输入,我的程序可以工作:,所以我认为这一定是终端本身的问题,但我仍然对此一无所知。./compiled -m "\"foo foo\""
答: 暂无答案
评论
argv
"
\"