首页 > 解决方案 > 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 - 请在上面的链接中尝试。我不可能知道他们通过的所有测试用例,包括隐藏的测试用例。

标签: c++

解决方案


尝试这个:

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,因此您需要确保两个数组至少是那个大小。


推荐阅读