为什么在执行语句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};
答案 0 :(得分:3)
您将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
代码。