簡體   English   中英

字符數組中的分段錯誤

[英]Segmentation fault in char array

我正在嘗試從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");
}

編輯(解釋):您的數組大小可能不同。 由於兩個不同大小的數組不能互為字謎,我們首先檢查它並在大小不同時退出。

請注意,即使沒有這個邏輯要求,您仍然需要檢查數組大小。 您在索引i處訪問兩個數組,因此您需要確保兩個數組至少為該大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM