Array[0] 在进入 "for" 循环时发生变化,不知道为什么

Array[0] is changing while entering the "for" loop, can't figure out why

我正在 HackerRank 上挑战,找到了方法,但有一个小错误我无法弄清楚。如果需要更多信息,请访问 https://www.hackerrank.com/challenges/sparse-arrays

基本上我只有 arr[0] 有问题。它将 arr[0] 存储为 'aba',然后一旦遇到第一个 for 循环,它就会变为 'ab'。为什么?

输入:

4
aba
baba
aba
xzxb
3
aba
xzxb
ab

代码:

int main() {
  int i, j;
  int n;
  int q;
  scanf("%d", &n);
  char* arr[n];
  char* test[q];
  char* s;
  int counter[q];

  for (i = 0; i < q; i++) {
    counter[i] = 0;
  }

  for (i = 0; i < n; i++) {
    arr[i] = malloc(20);
    scanf("%s", arr[i]);
  }

  scanf("%d", &q);

  for (i = 0; i < q; i++) {
    test[i] = malloc(20);
    scanf("%s", test[i]);
  }

  for (i = 0; i < n; i++) {

    for (j = 0; j < q; j++) {

      if (strcmp(arr[i], test[j]) == 0) {

        counter[j]++;
      } else {
      }
    }
  }
  for (i = 0; i < q; i++) {
    printf("%d\n", counter[i]);
  }
  return 0;
}

您在初始化 q 之前将 testcounter 声明为大小为 q 的数组。将声明移到 scanf("%d",&q); 之后。同时移动 counter 的初始化循环:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  int i, j;
  int n;
  int q;
  scanf("%d", &n);
  char* arr[n];
  char* s;

  for(i=0; i<n; i++) {
    arr[i]= malloc(20);
    scanf("%s",arr[i]);
  }

  scanf("%d", &q);
  int counter[q];
  char* test[q]; 

  for(i=0; i<q; i++) {
    counter[i] = 0;
  }
  for(i=0; i<q; i++) {
    test[i]= malloc(20);
    scanf("%s",test[i]);
  }

  for(i=0; i<n; i++) {
    for(j=0; j<q; j++) {
      if (strcmp(arr[i],test[j]) == 0) {
        counter[j]++;
      }
    }
  }
  for(i=0; i<q; i++) {
    printf("%d\n", counter[i]);
  }
  return 0;
}
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
  int i, j;
  int n;
  int q;
  scanf("%d", &n);
  char* arr[n];


  for (i = 0; i < n; i++) {
    arr[i] = malloc(20);
    scanf("%s", arr[i]);
  }

  scanf("%d", &q);

  char* test[q];
  char* s;
  int counter[q];


  for (i = 0; i < q; i++) {
    counter[i] = 0;
  }
  for (i = 0; i < q; i++) {
    test[i] = malloc(20);
    scanf("%s", test[i]);
  }

  for (i = 0; i < n; i++) {

    for (j = 0; j < q; j++) {

      if (strcmp(arr[i], test[j]) == 0) {

        counter[j]++;
      } else {
      }
    }
  }
  for (i = 0; i < q; i++) {
    printf("%d\n", counter[i]);
  }
  return 0;
}

试试这个,在声明和初始化之后使用变量