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;