c++ - char数组中的分段错误
问题描述
我正在尝试从https://practice.geeksforgeeks.org/problems/anagram/0解决字谜问题。当我在我的计算机上尝试使用自定义输入时,它工作正常。但是当我在上面的链接中尝试它时,它会引发分段错误。我在这里做错了什么?提前致谢。
我的代码
#include <bits/stdc++.h>
int checkAnagram(char a[],char b[])
{
int i,x=0;
int n = strlen(a);
int m = strlen(b);
if(n != m)
return -1;
for (i = 0; i < n; i++) {
x^=a[i];
}
for (i = 0; i < n; i++) {
x^=b[i];
}
return x;
}
int main(int argc, char const *argv[]) {
int t; //No of testcases
char a[100],b[100];
scanf("%d", &t);
while(t--)
{
scanf("%s", a);
scanf("%s", b);
checkAnagram(a,b) == 0?printf("YES\n"):printf("NO\n");
}
return 0;
}
PS - 请在上面的链接中尝试。我不可能知道他们通过的所有测试用例,包括隐藏的测试用例。
解决方案
尝试这个:
void checkAnagram(char a[],char b[])
{
int n1 = strlen(a);
int n2 = strlen(b);
if (n1 != n2) {
printf("NO\n");
return;
}
int x=0;
for (int i = 0; i < n1; i++) {
x^=a[i];
x^=b[i];
}
x == 0?printf("YES\n"):printf("NO\n");
}
编辑(解释):您的数组大小可能不同。由于两个不同大小的数组不能是彼此的字谜,因此我们首先检查它并在大小不同时退出。
请注意,即使没有这个逻辑要求,您仍然需要检查数组大小。您在 index 访问两个数组i
,因此您需要确保两个数组至少是那个大小。
推荐阅读
- hashicorp-vault - Vault 中转引擎自动开封在启动时未通过 VAULT_TOKEN?
- reactjs - 在 API 调用后反应重新渲染导致不良 UI 显示一瞬间
- python - 在 django 中,如何返回多对多连接的另一端?
- azure - 如何使用多个相互通信的应用服务设置 Azure 应用程序网关
- javascript - 使用 const 替换 attr 值
- excel - 比较两个工作表并将匹配项和唯一值粘贴到同一工作簿的不同工作表中
- c - 为什么 GCC -O0 转换按位与并乘以分支?
- xml - 使用 XSLT 将密钥添加到 XML 中的所有子节点到 MS Access 传输
- c++ - 网格未在 Assimp 中加载
- anylogic - Anylogic:为什么在编译过程中会出现“错误:无法解决”?