关于如何处理缓冲区溢出的有关问题
关于如何避免缓冲区溢出的问题
想知道CIN到string(stl)中的实现是怎么做的。
cin在重载>>操作符的时候,应该是根据自身得到的字符数组的长度适当的申请空间。
但是,我们该怎样才能得到用户输入的长度呢?如何做到既不造成溢出,又能不舍弃用户输入的内容?我是指的C实现,用C++STL的话就不考虑这个了。
大虾们给个提示```谢谢``
------解决方案--------------------
可以使用链表的方式,动态增加一个适当大小的BUF。
------解决方案--------------------
这个不就是个流实现的问题嘛,你参考一下其他的stream的实现不就得了。
------解决方案--------------------
看源码
你可以写一段getline程序,然后调试跟入
就会看到源码
------解决方案--------------------
想知道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