1 c++
例如,如果我输入大于10的字符,为什么不抛出异常或错误?你会得到getline的输入吗?
int main()
{
char c[10];
while (cin >> c)
{
cout << c << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不抛出异常或错误?
缓冲区溢出是未定义行为的示例.行为实际上是未定义的:如果溢出缓冲区,则无法保证程序将执行的操作.这不会产生异常,因为即使在正确的代码中这样做也需要大量相对昂贵的检查,而在C++中,一般的理念是你不需要支付你不需要的东西.
如果您避免使用原始数组和原始(非智能)指针并使用C++标准库容器,字符串和算法,则可以轻松避免大多数情况导致缓冲区溢出.
你会得到输入
getline吗?
您可以使用std::getline,它允许您将字符的"行"提取到a中std::string,或者您可以直接使用>>和提取到std::string对象中,具体取决于您要提取的内容.
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |