在做一些代码的时候,由于循环内外的数组值发生了自我变化,我没有得到预期的结果。为什么会这样?
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;
答案 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
。