c – printf(string)与printf(“%s”,string)
发布时间:2020-12-16 10:23:26 所属栏目:百科 来源:网络整理
导读:我正在写一个代理服务器,我遇到了一个奇怪的错误,我希望有人可以解释. 我收到了来自客户的GET请求的第一行.例如,客户端将发送请求: GET http://en.wikipedia.org/wiki/Special:Random HTTP/1.0Host: en.wikipedia.org... 我会将此请求转发给服务器. 但是,对
我正在写一个代理服务器,我遇到了一个奇怪的错误,我希望有人可以解释.
我收到了来自客户的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缓冲区[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 看起来:,/等已经被字符串格式化了. 当我运行printf(“%s”,缓冲区);时,我得到正确和预期的输出 编辑:我理解为什么会这样;我对为什么会这样发生感兴趣. 解决方法
1)如果你看一下函数原型,你会看到printf()需要一个格式字符串,以及零个或多个参数.因此,严格来说,“printf(string)”不正确:
SYNOPSIS #include <stdio.h> int printf(const char *format,...); int fprintf(FILE *stream,const char *format,...); int sprintf(char *str,...); int snprintf(char *str,size_t size,const char *format,...); 2)第一个参数将被解释为格式字符串,它找到的任何“%XXX”条目将被解释为占位符.这听起来正是发生了什么:) 3)解决方案当然是printf(“%s”,string) 4)或者使用puts(string)代替:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容