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

关于如何避免缓冲区溢出的问题
想知道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