2017-10-15 56 views
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行打印。

+1

'H.HHH..XX.H ...... X..HH ........ XHX ........'的长度是** 40 **。所以你需要char char [20] [40]' - >'char charM [20] [40 + 1]' – BLUEPIXY

+0

它们两个的长度都是40.然而一个是有效的,另一个不是。如果我把[20] [41]放在一起,每次测试都会打碎。 –

+0

所以'char charT [40] = {0};' - >'char charT [40 + 1] = {0};' – BLUEPIXY

回答

0

解决了使用fgets()而不是scanf()的问题。

相关问题