字符串指针和字符数组之间的混淆问题

时间:2016-10-03 11:39:40

标签: c++ arrays string pointers

亲爱的堆栈溢出社区

我正在学习C和C ++,并且我有一些与String指针和字符数组相关的问题。

我做了一个简单的程序:

void Strings (void)
{
    char String1  [20];

    cout<<"Please Enter your String1: "<<endl;

    cin>>String1;
    cin.ignore ();


    cout<<String1<<endl;
}
  • 创建了String1 [20],包含20个元素的字符数组
  • cout&lt;&lt;“请输入您的string1”
  • cin>>String1; String1充当指向数组的指针,我输入的内容将存储在String1中,
  • 键入“ThisisaniceexampleofstringsinCpp”(34个字符)
  • 我编译了程序,它崩溃了,因为我输入的字符串超过20个字符(有意义)。

我对程序进行了以下更改。

void Strings (void)
{
    char*String0 = new char[20];

    cout<<"Please Enter your String0: "<<endl;

    cin>>String0;
    cin.ignore ();


    cout<<String0<<endl;
}
  • 我创建了一个字符指针,指向20个字符元素的空间的程序存储器中的地址(如20个元素的字符数组
  • Cout“请输入您的字符串”
  • 我键入的字符串将存储在String0中(指向20个元素的字符数组的地址指针
  • 我输入“ThisisaniceexampleofstringsinCpp”(34个字符),它存储在String0中没有任何问题。

为什么char*String0 = new char[20]一个空格为20个字符的字符指针可以存储34个字符的字符串,但是char String1 [20]一个20个元素的字符数组不能存储。我不应该在两个例子中都出错,因为我输入的字符串超过了他们持有/指向的空间?

提前谢谢。

亚当

0 个答案:

没有答案