c++ - 在 Linux 中检测分号作为命令行参数

标签 c++ command-line command-line-arguments

我正在尝试运行一个 C++ 应用程序,我将一些命令行参数传递给它,如下所示:

./startServer -ip 10.78.242.4 tcpip{ldap=no;port=2435}

应用程序正在崩溃,因为它无法获得正确的端口。在网上搜索,我发现“;”被视为命令字符 ( Semicolon on command line in linux) 的结尾,因此之后的所有内容都将被忽略。我也明白把它放在引号内会很好。但是,我不想将这种将参数放在引号中的限制强加给用户。所以,我想知道有没有办法处理“;” argv 数组中的字符?

最佳答案

分号分隔两个命令,因此您的命令行等同于

./startServer -ip 10.78.242.4 tcpip{ldap=no
port=2435}

您的应用程序永远不会知道分号或第二个命令的任何信息,这些将完全由 shell 处理。您需要使用反斜杠转义冒号或将其括在引号中。其他可能导致类似问题的字符包括:$,\-#`'":*?()&|

复杂的字符串更容易从文件或通过标准输入传递。

关于c++ - 在 Linux 中检测分号作为命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713388/

相关文章:

c# - 将命令行参数传递给单一服务

c++ - 浮点运算是否会导致 IEC 559/IEEE 754 浮点类型的无限未定义行为

C++ 程序崩溃且没有错误

c++ - 将二进制字符串转换为整数字符串 C++

command-line - 如何使用命令行获取NTFS文件的有效权限?

regex - 在 perl 正则表达式替换命令行中使用 bash 变量名称作为匹配替换

c++ - 在通过网络文件系统共享的HOME下安装C C++库

c - 使用atoi查找最大和最小数字

java - 在 Java 中,有没有办法获取命令行参数,即使 main() 没有保存它们?

perl - 如何将@ARGV 的第一个值与可能的选项数组匹配