Jaz*_*azz 4 c++ string buffer-overflow
这与C++中的字符串有关.我很长时间没有接触过C/C++; 事实上,大约7年前,我只在大学的第一年用这些语言编程.
在C中保存字符串我必须创建字符数组(无论是静态的还是动态的,都不需要考虑).这意味着我需要提前猜出数组将包含的字符串的大小.我在C++中应用了相同的方法.我知道有一个std :: string类但我从来没有使用它.
我的问题是,因为我们从未在std :: string类中声明数组/字符串的大小,所以在写入时会发生缓冲区溢出.我的意思是,在C中,如果数组的大小是10并且我在控制台上键入了超过10个字符,那么额外的数据将被写入到与数组相邻的其他对象的内存位置.使用cin对象时,std :: string中是否会发生类似的事情.
使用std :: string时,我是否必须在C++之前猜测字符串的大小?
好!谢谢大家.这个页面上没有一个正确的答案(提供了很多不同的解释),所以我没有选择任何一个这样的答案.我很满意第一个5.小心!
取决于您用来访问string对象的成员,是的.所以,例如,如果你使用reference operator[](size_type pos)where pos > size(),是的,你会的.
假设标准库实现中没有错误,没有.A std::string总是管理自己的记忆.
当然,除非您破坏提供的访问器方法std::string,并执行以下操作:
std::string str = "foo";
char *p = (char *)str.c_str();
strcpy(p, "blah");
Run Code Online (Sandbox Code Playgroud)
这里没有保护,并且正在调用未定义的行为.