Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C K&;r3-2溢出问题_C_Overflow - Fatal编程技术网

C K&;r3-2溢出问题

C K&;r3-2溢出问题,c,overflow,C,Overflow,我正在经历K&R和3-2看起来很容易进入缓冲区溢出 编写一个函数escape(s,t),当它将字符串t复制到s时,将换行符和制表符之类的字符转换为可见的转义序列,如\n和\t。使用开关 如果我用“\”和“n”替换字节“\n”,s的大小可能会比源字符串大很多 我可以只写这个程序,忽略溢出,但我宁愿不写 我脑子里有个问题,怎么处理 我在想有一个固定的缓冲区大小,可能超出了限制.h,当它满的时候,将缓冲区刷新到stdio 我相信这个练习的全部目的是教你,当你处理类似的事情时,你需要: 拍摄过高(使缓冲

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

编写一个函数escape(s,t),当它将字符串t复制到s时,将换行符和制表符之类的字符转换为可见的转义序列,如\n和\t。使用开关

如果我用“\”和“n”替换字节“\n”,s的大小可能会比源字符串大很多

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

我脑子里有个问题,怎么处理


我在想有一个固定的缓冲区大小,可能超出了限制.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:这是两个世界中最糟糕的情况……只有当没有特定的应用程序每次都能遇到最坏的情况时,摊销好的性能才有用。此外,这种方法需要最多的编程工作。