检测到堆栈粉碎,并且带有标志 -Wall 给我警告 -Wchar-subscripts

问题描述 投票:0回答:1

这是我的第一个程序,我不知道如何解决这个问题,我正在寻找教程,但我不完全明白我做错了什么。

void railFenceCipher(char *stringa){
 
  char railFence[3][56];
  char output[56];
  char k;

  for (char i = 0; i < 3; i++) {
    for (char j = 0; j < 56; j++) {
      railFence[i][j] = ' ';
    }
  }

  for (i = 0; i < 3; i++) {
    for (j = i; j < 56; j += 4) {
      railFence[i][j] = stringa[k++];
    }
  }

  k = 0;
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 56; j++) {
      if (railFence[j][i] != ' ') {
        output[k++] = railFence[j][i];
      }
    }
  }

  output[k] = '\0';
  printf("Encrypted message: %s\n", output);

}

这应该是一个从主函数中获取字符串并使用围栏密码对其进行加密的函数。但我不知道如何解决检测到的错误堆栈粉碎和警告 -Wchar-subscripts

arrays c multidimensional-array stack-smash
1个回答
0
投票
  char output[56];
  k = 0;
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 56; j++) {
      if (railFence[j][i] != ' ') {
        output[k++] = railFence[j][i];
      }
    }
  }

此处 k 从

0
开始到
3*56 = 168
,大于 56,因此您访问数组
output
超出范围。

© www.soinside.com 2019 - 2024. All rights reserved.