为什么数组元素在循环内外具有不同的值

Why the array elements are having different values inside and outside the loop?

本文关键字:数组元素 循环 为什么      更新时间:2023-10-16

在做一些代码时,由于循环内外数组值的自变化,我没有预期的结果。

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

输出为:

aaa
bbb
bbb
bbb

以下行不会按照您的想法执行:

    arr[i]=inp;

在这里,您分配arr[i]指向inp的指针,而不是将inp ut缓冲区复制到arr[i]中。在同一迭代中(即在第一个cout << arr[i]),一切都很好。一旦您覆盖了 inp 的内容,更改将反映在您分配给同一指针arr的所有单元格中。实际上,在循环结束时,arr的所有单元格都指向inp,这意味着您将始终看到从cin中提取的最后一个值。

作为解决方案,arr一个"字符串"数组,并使用strncpy复制输入缓冲区:

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;

或者尽可能使用C++ std::string