这是我的第一个程序,我不知道如何解决这个问题,我正在寻找教程,但我不完全明白我做错了什么。
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
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
超出范围。