C K&;r3-2溢出问题
我正在经历K&R和3-2看起来很容易进入缓冲区溢出 编写一个函数escape(s,t),当它将字符串t复制到s时,将换行符和制表符之类的字符转换为可见的转义序列,如\n和\t。使用开关 如果我用“\”和“n”替换字节“\n”,s的大小可能会比源字符串大很多 我可以只写这个程序,忽略溢出,但我宁愿不写 我脑子里有个问题,怎么处理C K&;r3-2溢出问题,c,overflow,C,Overflow,我正在经历K&R和3-2看起来很容易进入缓冲区溢出 编写一个函数escape(s,t),当它将字符串t复制到s时,将换行符和制表符之类的字符转换为可见的转义序列,如\n和\t。使用开关 如果我用“\”和“n”替换字节“\n”,s的大小可能会比源字符串大很多 我可以只写这个程序,忽略溢出,但我宁愿不写 我脑子里有个问题,怎么处理 我在想有一个固定的缓冲区大小,可能超出了限制.h,当它满的时候,将缓冲区刷新到stdio 我相信这个练习的全部目的是教你,当你处理类似的事情时,你需要: 拍摄过高(使缓冲
我在想有一个固定的缓冲区大小,可能超出了限制.h,当它满的时候,将缓冲区刷新到stdio 我相信这个练习的全部目的是教你,当你处理类似的事情时,你需要:
s的长度永远不会超过t的两倍。由于这显然是一个练习,旨在帮助您学习使用
开关
,因此我认为可以假设调用者在s中传递一个足够长的字符串。或者,如果s的类型为char**(或类似类型),则您需要分配字符串,在这种情况下,您可以分配适当大小的字符串
在实际函数中,可能会有另一个参数指示目标字符串的最大长度。尝试添加大小参数,以便知道目标缓冲区的大小。如果传递指向该参数的指针,如果缓冲区太小,则可以返回某种类型的错误值,并通过size参数返回所需的大小。比如:
int escape(size_t *size, char *out, const char *in);
s和t的类型是什么?还没有指针,所以char s[],char t[]1.5。从启发式的“可能”缓冲区大小开始。开始处理它,只有在即将溢出时才将其复制到新的缓冲区。@Ates:这是两个世界中最糟糕的情况……只有当没有特定的应用程序每次都能遇到最坏的情况时,摊销好的性能才有用。此外,这种方法需要最多的编程工作。