加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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”,缓冲区);时,我得到正确和预期的输出

编辑:我理解为什么会这样;我对为什么会这样发生感兴趣.
printf的值是来自堆栈中某个任意区域的“字符串格式”吗?
是:et al有效的格式字符串?

解决方法

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)代替:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读