我正在制作一个解码和修改矩阵的小程序。你可以为它设置转弯。问题是,我在特定测试中遇到Stack smashing错误,我似乎无法找到错误。在输出中打印矩阵时出错。
这是代码。
#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行打印停止。
答案 0 :(得分:0)
修复了使用fgets()而不是scanf()的问题。