C++ 数组字符数超过预期值

C++ 数组字符数超过预期值,c++,arrays,char,C++,Arrays,Char,我对下面的代码感到困惑。。。请澄清 当我使用此代码时: #include<iostream> using namespace std; int main() { char array[10]; cin>>array; int i=0; while(array[i]!='\0') { cout<<array[i]; i++; } } 下面是一个缓冲区溢出的示例。您的输入字符

我对下面的代码感到困惑。。。请澄清

当我使用此代码时:

#include<iostream>
  using namespace std; 
int main()
{ 
   char array[10];
   cin>>array;
   int i=0;
   while(array[i]!='\0')
      {
        cout<<array[i];
        i++;
      }
}

下面是一个缓冲区溢出的示例。您的输入字符串在
数组
结束后重写了一些字节。但这是一个运行时问题,在编译时无法检测到

代码的真正问题是程序的行为是不确定的。有时程序会崩溃,有时不会


您确实需要一个大小合理的缓冲区(例如100个或更多字符),并使用有限输入的方法。

以下是缓冲区溢出的示例。您的输入字符串在
数组
结束后重写了一些字节。但这是一个运行时问题,在编译时无法检测到

代码的真正问题是程序的行为是不确定的。有时程序会崩溃,有时不会


您确实需要一个大小合理的缓冲区(例如100个或更多字符),并使用有限输入的方法。

以下是缓冲区溢出的示例。您的输入字符串在
数组
结束后重写了一些字节。但这是一个运行时问题,在编译时无法检测到

代码的真正问题是程序的行为是不确定的。有时程序会崩溃,有时不会


您确实需要一个大小合理的缓冲区(例如100个或更多字符),并使用有限输入的方法。

以下是缓冲区溢出的示例。您的输入字符串在
数组
结束后重写了一些字节。但这是一个运行时问题,在编译时无法检测到

代码的真正问题是程序的行为是不确定的。有时程序会崩溃,有时不会


您确实需要一个大小合理的缓冲区(例如100个或更多个字符),并使用有限输入的方法。

第一个代码片段完全靠运气工作。在只能容纳9的数组中输入10个字符:在C样式字符串中,最后一个位置是终止
0
所需的位置

由于两个(相关)原因,它似乎起作用:

  • 输入的字符不超过9个。尝试输入很多,更多,程序肯定会崩溃
  • 在堆栈上的这个数组之后,内存中肯定碰巧有一个零。如果没有,输出循环将继续打印数据,直到内存耗尽或在其他任何地方遇到
    0
  • 因此,从技术上讲,这是一种“缓冲区溢出”


    第二个代码段中的错误是因为编译器知道不应该将n个字符存储到长度为n的数组中——它指出没有空间终止
    0

    第一个代码段完全靠运气工作。在只能容纳9的数组中输入10个字符:在C样式字符串中,最后一个位置是终止
    0
    所需的位置

    由于两个(相关)原因,它似乎起作用:

  • 输入的字符不超过9个。尝试输入很多,更多,程序肯定会崩溃
  • 在堆栈上的这个数组之后,内存中肯定碰巧有一个零。如果没有,输出循环将继续打印数据,直到内存耗尽或在其他任何地方遇到
    0
  • 因此,从技术上讲,这是一种“缓冲区溢出”


    第二个代码段中的错误是因为编译器知道不应该将n个字符存储到长度为n的数组中——它指出没有空间终止
    0

    第一个代码段完全靠运气工作。在只能容纳9的数组中输入10个字符:在C样式字符串中,最后一个位置是终止
    0
    所需的位置

    由于两个(相关)原因,它似乎起作用:

  • 输入的字符不超过9个。尝试输入很多,更多,程序肯定会崩溃
  • 在堆栈上的这个数组之后,内存中肯定碰巧有一个零。如果没有,输出循环将继续打印数据,直到内存耗尽或在其他任何地方遇到
    0
  • 因此,从技术上讲,这是一种“缓冲区溢出”


    第二个代码段中的错误是因为编译器知道不应该将n个字符存储到长度为n的数组中——它指出没有空间终止
    0

    第一个代码段完全靠运气工作。在只能容纳9的数组中输入10个字符:在C样式字符串中,最后一个位置是终止
    0
    所需的位置

    由于两个(相关)原因,它似乎起作用:

  • 输入的字符不超过9个。尝试输入很多,更多,程序肯定会崩溃
  • 在堆栈上的这个数组之后,内存中肯定碰巧有一个零。如果没有,输出循环将继续打印数据,直到内存耗尽或在其他任何地方遇到
    0
  • 因此,从技术上讲,这是一种“缓冲区溢出”


    第二个代码段中的错误是因为编译器知道不应该将n个字符存储到长度为n的数组中——它指出没有空间终止
    0

    您的第一个示例是缓冲区溢出,第二个无法编译,因为您试图将11
    char
    填充到10中
    char
    数组。第一个示例是缓冲区溢出,第二个无法编译,因为您试图将11
    char
    填充到10
    char
    数组中。第一个示例是缓冲区溢出,第二个无法编译,因为您试图将11
    char
    填充到10
    char
    数组中。第一个示例是示例是缓冲区溢出,第二个不会编译,因为
    #include <iostream>
    using namespace std;
    
    int main() {
    char array[10]="qwertyuiop";
    int i=0;
    while(array[i]!='\0')
        {
        cout<<array[i];
        i++;
        }
    }