无法在我的代码中找到错误,导致GCC出错

时间:2017-10-15 01:14:15

标签: c

我正在制作一个解码和修改矩阵的小程序。你可以为它设置转弯。问题是,我在特定测试中遇到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行打印停止。

1 个答案:

答案 0 :(得分:0)

修复了使用fgets()而不是scanf()的问题。