C++ 为什么数组元素在循环内部和外部具有不同的值?

C++ 为什么数组元素在循环内部和外部具有不同的值?,c++,arrays,C++,Arrays,在编写一些代码时,由于循环内外数组值的自我更改,我没有得到预期的结果。为什么会发生这种情况 char* arr[2]; int i=0; char inp[20]; while(i<2) { cin>>inp; arr[i]=inp; cout<<arr[i]<<endl; i++; } cout<<arr[0]<<endl; cout<<arr[1]<<en

在编写一些代码时,由于循环内外数组值的自我更改,我没有得到预期的结果。为什么会发生这种情况

char* arr[2];
int i=0;
char inp[20];
while(i<2)
    {
    cin>>inp;
    arr[i]=inp;
    cout<<arr[i]<<endl;
    i++;
    }
cout<<arr[0]<<endl;
cout<<arr[1]<<endl;
输出为:

aaa
bbb
bbb
bbb

下面这句话与您的想法不符:

    arr[i]=inp;
在这里,您将为
arr[i]
分配一个指向
inp
的指针,而不是将
inp
ut缓冲区复制到
arr[i]
。在相同的迭代过程中(即在第一次
cout-inp;
strncpy(arr[i],inp,20);

cout下面的行与您的想法不符:

    arr[i]=inp;
在这里,您正在为
arr[i]
分配一个指向
inp
的指针,而不是在同一迭代过程中将
inp
ut缓冲区复制到
arr[i]
; strncpy(arr[i],inp,20);

coutStill好奇为什么最后两行是
aaa
,而不是
bbb
。可能是OP的错误。@mikedu95我最好的猜测是OP手工编写输出而不是从程序输出中复制粘贴。无论如何,这里的问题很清楚:)是的…这是一个错误…我只是不明白为什么我总是得到bbb…Thanx@stefanosanfilippo也..请你建议一种方法来存储我想要的值,而不是像在这种情况下修改它们?@Himanshu我不确定我是否正确理解了你的问题。仍然好奇为什么最后两行是
aaa
,而不是
bbb
如预期。可能是OP中的错误操作。@mikedu95我最好的猜测是OP在手工编写输出而不是从程序输出中复制粘贴输出时犯了一个错误。无论如何,这里的问题非常清楚:)是的……这是一个错误……我只是不明白为什么我总是得到bbb。。。Thanx@stefanosanfilippo也..请你建议一种存储我想要的值的方法,而不是像本例中那样修改它们吗?@Himanshu我不确定我是否正确理解了你的问题。你确定你的输出吗?Ideone生成了一个不同的数组,与已经给出的答案一致:@iharob数组-尤其是封装的
std::array
-在许多情况下都非常有效。当然,对于像这样的即席动态数组,
vector
更好,但在一般层面上——正如您所说的那样——我不同意您提出的任何一个总体建议。@M.M感谢您的澄清,我将删除该评论。由于错误,我在最后两行中写入了错误的输出。我已将其更正为bbb而不是aaa…因此,对于我的错误,我深表歉意@anedar您确定您的输出吗?Ideone生成了一个不同的数组,与已经给出的答案一致:@iharob数组-尤其是封装的
std::array
-在许多情况下都非常有效。当然,对于像这样的即席动态数组,
vector
更好,但在一般层面上——正如您所说的那样——我不同意您提出的任何一个总体建议。@M.M感谢您的澄清,我将删除注释。由于错误,我在最后两行中写了错误的输出。我已将其更正为bbb而不是aaa…因此,很抱歉我的错误@Anedar
char arr[2][20];
int i=0;
char inp[20];
while(i<2)
    {
    cin>>inp;
    strncpy(arr[i], inp, 20);
    cout<<arr[i]<<endl;
    i++;
    }
cout<<arr[0]<<endl;
cout<<arr[1]<<endl;