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

时间:2016-01-25 12:10:19

标签: c++ arrays

在做一些代码的时候,由于循环内外的数组值发生了自我变化,我没有得到预期的结果。为什么会这样?

autoreconf -f

输入:

autoconf

输出结果为:

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;

1 个答案:

答案 0 :(得分:3)

以下行不符合您的想法:

    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