首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于如何处理缓冲区溢出的有关问题

2012-02-08 
关于如何避免缓冲区溢出的问题想知道CIN到string(stl)中的实现是怎么做的。cin在重载操作符的时候,应该是

关于如何避免缓冲区溢出的问题
想知道CIN到string(stl)中的实现是怎么做的。

cin在重载>>操作符的时候,应该是根据自身得到的字符数组的长度适当的申请空间。

但是,我们该怎样才能得到用户输入的长度呢?如何做到既不造成溢出,又能不舍弃用户输入的内容?我是指的C实现,用C++STL的话就不考虑这个了。

大虾们给个提示```谢谢``

[解决办法]
可以使用链表的方式,动态增加一个适当大小的BUF。
[解决办法]
这个不就是个流实现的问题嘛,你参考一下其他的stream的实现不就得了。

[解决办法]
看源码
你可以写一段getline程序,然后调试跟入
就会看到源码
[解决办法]

C/C++ code
#include "stdlib.h"#include "conio.h"struct _tcin {    static const int buffer_size = 128;    _tcin& operator>>(char** buffer) {                *buffer = (char*)malloc(0);        int  i = 0;        int  t = 0;        while ((buf[i++] = getch()) != '\r')        {            putchar(buf[i - 1]);            if (i == 1024)            {                ++t;                realloc(*buffer, t * buffer_size);                memcpy(*buffer + (t - 1) * buffer_size, buf, buffer_size);                i = 0;            }        }        realloc(*buffer, t * buffer_size + i);        memcpy(*buffer + t * buffer_size, buf, i - 1);        putchar('\n');        (*buffer)[t * buffer_size + i - 1] = 0;        return *this;    }    char buf[buffer_size];} tcin;int main() {    char* buf = 0;    tcin>>&buf;    printf("%s", buf);    free(buf);       return 0;}
[解决办法]
敬佩!!!!高手!!!!!!
代码写的真好。。。。
[解决办法]
seekg + tellg 肯定不行,所以只能“摸着石头过河”。星羽的方法已经做得很清楚了。getch 是单字节读入;如果需要多字节读入,给这个“多字节”准备一段缓冲区就可以了。
[解决办法]
Mark

热点排行