0
我正在製作一個解碼和修改矩陣的小程序。你可以爲它設置轉彎。問題是,我在特定的測試中得到了Stack粉碎錯誤,而且我似乎無法找到錯誤。錯誤出現在打印輸出中的矩陣。無法找到我的代碼中的錯誤,獲得與GCC的錯誤
這是代碼。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
*
* @param col
* @param charM
* @param row
*/
void printMatrix(char (*charM)[40]) {
int a = 0;
int b = 0;
for (a = 0; a < 20; a++){
for (b = 0; b < 40; b++){
printf("%c", charM[a][b]);
}
printf("\n");
}
}
/**
*
* @param col
* @param charM
* @param row
*/
void readMatrix(char (*charM)[40]) {
char charT[40] = {0};
int count = 0;
while (count < 20) {
scanf("%s", charT);
for (int i = 0; i < 40; i++){
charM[count][i] = charT[i];
}
count++;
}
}
/**
*
* @param arg
* @param col
* @param charM
* @param row
*/
void pandemicTurns(int arg, char (*charM)[40]){
int turns = arg;
int daysCount = 0;
do {
if (daysCount == 0) printf("Jour 0\n");
else printf("Jour %d\n", daysCount);
printMatrix(charM);
daysCount++;
turns--;
} while (turns != -1);
}
/*
*
*/
int main(int argc, char *argv[]) {
char charM[20][40] = {'0'};
int argvs = 0;
if (argc == 1) {
readMatrix(charM);
pandemicTurns(0, charM);
}
else if(argc == 2 && atoi(argv[1]) > 0 && atoi(argv[1]) <= 100) {
argvs = atoi(argv[1]);
readMatrix(charM);
pandemicTurns(argvs, charM);
}
else {
errorExit(argv);
}
return (EXIT_SUCCESS);
}
當我給這個輸入:
( '' 的20 * 40的矩陣字符)
........................................
一切正常。但是當我開始混入H和X時:
H.HHH..XX.H......X..HH.......XHX........
我得到一個堆棧粉碎錯誤。它停在第2天和第3行打印。
'H.HHH..XX.H ...... X..HH ........ XHX ........'的長度是** 40 **。所以你需要char char [20] [40]' - >'char charM [20] [40 + 1]' – BLUEPIXY
它們兩個的長度都是40.然而一個是有效的,另一個不是。如果我把[20] [41]放在一起,每次測試都會打碎。 –
所以'char charT [40] = {0};' - >'char charT [40 + 1] = {0};' – BLUEPIXY