首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K&R _ 3-2溢出问题

K&R _ 3-2溢出问题
EN

Stack Overflow用户
提问于 2011-04-23 05:00:25
回答 3查看 123关注 0票数 2

我正在进行K&R,3-2看起来很容易进入缓冲区溢出

编写函数转义( s,t),在将字符串t复制到s时将换行符和制表符等字符转换为可见的转义序列(如\n和\t )。

如果我用'\‘和'n’替换字节'\n‘,那么s的大小可能比源字符串大得多。

我可以只写这个程序,忽略溢出,但我宁愿不。

我不知道该怎么处理这件事?

我在想有一个固定的缓冲区大小,也许是超出极限的东西,当缓冲区满了的时候,把缓冲区冲到stdio上?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-23 05:02:49

我相信这个练习的全部目的是教你,当你处理这样的事情时,你要么需要:

  1. 拍摄的太高(使缓冲区的大小是原来的两倍)
  2. 需要额外的时间(额外的传球)并预先计算缓冲区的所需大小.
票数 4
EN

Stack Overflow用户

发布于 2011-04-23 05:09:16

S的长度永远不会超过t的两倍,因为这显然是为了帮助您学习使用switch,所以我认为假设调用者传递一个长度足够长的字符串是可以的。或者,如果s是char** (或类似的)类型,那么您就应该分配字符串,在这种情况下,您可以分配一个大小合适的字符串。

在一个真实的函数中,您可能会有另一个参数,它指示目标字符串的最大长度。

票数 1
EN

Stack Overflow用户

发布于 2011-04-23 05:10:02

尝试添加一个size参数,以便知道目标缓冲区的大小。如果您传递指向该参数的指针,则如果缓冲区太小,则可以返回某种错误值,并通过size param传回所需的大小。类似于:

代码语言:javascript
复制
int escape(size_t *size, char *out, const char *in);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5762290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档