有没有办法传递\ r \ n作为C程序的命令行参数?

时间:2016-10-03 08:31:40

标签: command-line command-line-arguments

我想检查作为C程序的命令行参数传递的字符串的结尾。结尾应包含空格字符\ r \ n。我所做的是我在程序之后在引号之间写下字符串:

./program_name "String"

我想知道是否存在在该字符串末尾传递\ r \ n的方法。 如果我刚写了:

./program_name "String\r\n"

我仍然没有得到我希望将字符串的最后两个字符与'\ r'和'\ n'进行比较的回报。以下是我正在检查的代码段:

char * request_line = argv[1];
size_t sizeOfReq = strlen(request_line);
else if(request_line[sizeOfReq-1] != '\n' && request_line[sizeOfReq-2] != '\r') {


 printf("He couldn't just do that!\n");
    return false;
}

2 个答案:

答案 0 :(得分:2)

\r\n不是特殊字符。这只是一个惯例。后跟字符的反斜杠被某些软件解释为转义序列。在您的情况下,C编译器将两个字符序列\r转换为一个字符回车符,将两个字符序列\n转换为一个字符换行符。

因此,您依赖于将转义序列转换为相应的真实字符的人。

现在您有两个选择:在程序中添加代码以处理转义序列转换或使调用者生成真实字符。

在linux中,给进程的参数是由调用进程的程序创建的。如果您使用bash shell启动该过程,则可以使用(阅读here

./program_name $'String\r\n'

表示bash该字符串包含需要解析的C字符串。

其他shell可以拥有自己的sytax /规则。

答案 1 :(得分:0)

这应该可以解决问题。

./program_name "String\r\n"