我想检查作为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;
}
答案 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"