我正在编写一个代理服务器,并遇到了一个奇怪的bug,希望有人能解释一下。
我正在接收来自客户端的GET请求的第一行。例如,客户端会发送以下请求:
我会将这个请求转发给服务器。
然而,对于某些网址,我会遇到问题:
我将这行文本读入
当我打印接收到的 GET 请求时,
打印的字符串是:
这段文字的意思是:似乎%3A、%2F等字符已经被字符串格式化了。当我运行
我正在接收来自客户端的GET请求的第一行。例如,客户端会发送以下请求:
GET http://en.wikipedia.org/wiki/Special:Random HTTP/1.0
Host: en.wikipedia.org
...
我会将这个请求转发给服务器。
然而,对于某些网址,我会遇到问题:
GET http://map.media6degrees.com/orbserv/curl=http%3A%2F%2Fwww.masteringemacs.org%2Farticles[trunc] HTTP/1.0
我将这行文本读入
char buffer[MAXLINE_LENGTH]
中,该缓冲区足够长以容纳该字符串。当我打印接收到的 GET 请求时,
printf(buffer);
打印的字符串是:
GET http://map.media6degrees.com/orbserv/hbpix?pixId=2869&curl=http0X0.0000000000015P-10220.0000000.000000www.masteringemacs.org0.000000articles0.00000020100.000000110.000000010.000000running-shells-in-emacs-overview204741995430849962482228271154502456423284733956118041206315879167624419264810411254941012469231829496710329852458403099883653794777355548418601638730167027236864.000000 HTTP/1.0
这段文字的意思是:似乎%3A、%2F等字符已经被字符串格式化了。当我运行
printf("%s",buffer);
时,输出结果正确且符合预期。我理解为什么会发生这种情况; 我想知道为什么会以这种方式发生。printf“字符串格式化”的值是否来自堆栈上的任意区域? %3A 等是否是有效的格式化字符串?