gpt4 book ai didi

c++ - C++ 代码 : setting one variable to zero causes unrelated variable to become zero 中的错误

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

为什么在执行语句arr[26]={0}之后,变量n2的值在下面的代码中变为0; ,(我在调试的时候意识到了这一点)而 memset(arr,0,sizeof(arr));工作完美。

#include<bits/stdc++.h>
using namespace std;

int main()
{
long int n1,n2;
int count=0,flag;
int arr[26] = {0};
cin>>n1>>n2;
string box1[n1];
string box2[n2];

for(int j=0;j<n1;j++)
cin>>box1[j];

for(int j=0;j<n2;j++)
cin>>box2[j];

count=0;

for(int i=0;i<n1;i++)
{

for(int j=0;j<n2;j++)
{
arr[26]={0}; // after the execution of this statement, n2 changes to 0.. WHY???
//memset(arr,0,sizeof(arr)); // If i use memset , things work correctly
cout<<n2<<endl; //n2 becomes zero
for(int k=0;k<box1[i].length();k++)
arr[box1[i][k]-'A']++;

for(int k=0;k<box2[j].length();k++)
arr[box2[j][k]-'A']++;

for(int k=0;k<26;k++)
{
if(arr[k]>=1)
continue;
else
{
flag=1;
break;
}

}

}

}
printf("%d",count);
return 0;
}

谁能解释一下有什么问题:

arr[26] = {0};

最佳答案

你将 arr 声明为:

int arr[26] = {0};

这意味着它的有效索引是 0-25,总共有 26 个点。然后,当您写入 arr[26] 时,您实际上是在数组外部写入,并覆盖编译器分配给 n2 的内存。

如果你希望能够索引到 26,你需要为 27 个整数声明空间:

int arr[27] = {0};

还有代码:

arr[26]={0}; // after the execution of this statement, n2 changes to 0.. WHY???

只赋值给数组中的第 26 个元素。它不会将整个数组或类似的东西清零。在运行时将整个数组置零的方法是使用 arr = {0} 或使用您已有的 memset 代码。

关于c++ - C++ 代码 : setting one variable to zero causes unrelated variable to become zero 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39714646/

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