2017-10-15 78 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()的問題。

相關問題