我正在进行K&R,3-2看起来很容易进入缓冲区溢出
编写函数转义( s,t),在将字符串t复制到s时将换行符和制表符等字符转换为可见的转义序列(如\n和\t )。
如果我用'\‘和'n’替换字节'\n‘,那么s的大小可能比源字符串大得多。
我可以只写这个程序,忽略溢出,但我宁愿不。
我不知道该怎么处理这件事?
我在想有一个固定的缓冲区大小,也许是超出极限的东西,当缓冲区满了的时候,把缓冲区冲到stdio上?
发布于 2011-04-23 05:02:49
我相信这个练习的全部目的是教你,当你处理这样的事情时,你要么需要:
发布于 2011-04-23 05:09:16
S的长度永远不会超过t的两倍,因为这显然是为了帮助您学习使用switch,所以我认为假设调用者传递一个长度足够长的字符串是可以的。或者,如果s是char** (或类似的)类型,那么您就应该分配字符串,在这种情况下,您可以分配一个大小合适的字符串。
在一个真实的函数中,您可能会有另一个参数,它指示目标字符串的最大长度。
发布于 2011-04-23 05:10:02
尝试添加一个size参数,以便知道目标缓冲区的大小。如果您传递指向该参数的指针,则如果缓冲区太小,则可以返回某种错误值,并通过size param传回所需的大小。类似于:
int escape(size_t *size, char *out, const char *in);https://stackoverflow.com/questions/5762290
复制相似问题