gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:07:07 25 4
gpt4 key购买 nike

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

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将缓冲区放入 arr[i] .在同一次迭代中(即在第一个 cout << arr[i] ),一切都很好。一旦覆盖 inp 的内容, 更改将反射(reflect)在 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如果可能的话。

关于c++ - 为什么数组元素在循环内外具有不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34992293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com