strstr 不适用于定界符“\r\n\r\n”
strstr doesn't work with the delimiter "\r\n\r\n"
我在子字符串中得到分隔符“\r\n\r\n”,而 strstr 返回 null
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int ac, char **av) {
char *ptr;
ptr = strstr(av[1], "\r\n\r\n");
printf("ptr = %s\n", ptr);
return 0;
}
我用这个启动代码:
./a.out "POST /cgi-bin/process.cgi HTTP/1.1\nUser-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)\nHost: www.tutorialspoint.com\nContent-Type: text/xml; charset=utf-8\nContent-Length: length\nAccept-Language: en-us\nAccept-Encoding: gzip, deflate\nConnection: Keep-Alive\r\n\r\n<?xml version='1.0' encoding='utf-8'?>"
而 ptr 等于 (null),为什么?
您传递给代码的字符串包含八个字符序列\
、r
、\
、n
、\
、r
, \
, n
.
字符串文字 "\r\n\r\n"
产生四个字符序列 ␍
、␊
、␍
、␊
.
要生成与参数匹配的字符串,请使用以下字符串文字:
"\r\n\r\n"
但我认为您更有可能希望提供正确的 HTTP 请求。
根据您使用的 echo
,echo
或 echo -e
可能会生成所需的字符串(加上尾随换行符):
$ echo -e 'a\r\nb\r\n' | od -c
0000000 a \r \n b \r \n \n
0000007
printf
可以准确地生成您想要的字符串,尽管您必须通过复制来转义 %
符号。
$ printf 'a\r\n%%\r\n' | od -c
0000000 a \r \n % \r \n
0000006
用法示例:
./a.out "$( printf 'POST ...\r\n\r\n...' )"
在您的情况下,您必须使用 strstr(av[1], "\r\n\r\n")
您还可以使用 bash $'string' 引用:
$ ./a.out $'POST /cgi-bin/process.cgi HTTP/1.1\nUser-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)\nHost: www.tutorialspoint.com\nContent-Type: text/xml; charset=utf-8\nContent-Length: length\nAccept-Language: en-us\nAccept-Encoding: gzip, deflate\nConnection: Keep-Alive\r\n\r\n<?xml version=\'1.0\' encoding=\'utf-8\'?>'
我在子字符串中得到分隔符“\r\n\r\n”,而 strstr 返回 null
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int ac, char **av) {
char *ptr;
ptr = strstr(av[1], "\r\n\r\n");
printf("ptr = %s\n", ptr);
return 0;
}
我用这个启动代码:
./a.out "POST /cgi-bin/process.cgi HTTP/1.1\nUser-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)\nHost: www.tutorialspoint.com\nContent-Type: text/xml; charset=utf-8\nContent-Length: length\nAccept-Language: en-us\nAccept-Encoding: gzip, deflate\nConnection: Keep-Alive\r\n\r\n<?xml version='1.0' encoding='utf-8'?>"
而 ptr 等于 (null),为什么?
您传递给代码的字符串包含八个字符序列\
、r
、\
、n
、\
、r
, \
, n
.
字符串文字 "\r\n\r\n"
产生四个字符序列 ␍
、␊
、␍
、␊
.
要生成与参数匹配的字符串,请使用以下字符串文字:
"\r\n\r\n"
但我认为您更有可能希望提供正确的 HTTP 请求。
根据您使用的 echo
,echo
或 echo -e
可能会生成所需的字符串(加上尾随换行符):
$ echo -e 'a\r\nb\r\n' | od -c
0000000 a \r \n b \r \n \n
0000007
printf
可以准确地生成您想要的字符串,尽管您必须通过复制来转义 %
符号。
$ printf 'a\r\n%%\r\n' | od -c
0000000 a \r \n % \r \n
0000006
用法示例:
./a.out "$( printf 'POST ...\r\n\r\n...' )"
在您的情况下,您必须使用 strstr(av[1], "\r\n\r\n")
您还可以使用 bash $'string' 引用:
$ ./a.out $'POST /cgi-bin/process.cgi HTTP/1.1\nUser-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)\nHost: www.tutorialspoint.com\nContent-Type: text/xml; charset=utf-8\nContent-Length: length\nAccept-Language: en-us\nAccept-Encoding: gzip, deflate\nConnection: Keep-Alive\r\n\r\n<?xml version=\'1.0\' encoding=\'utf-8\'?>'