2015-09-17 66 views
1

因此,我們正在學習如何使用帶有malloc的動態數組等等,我基本上正努力學習如何使用這個東西。在表面上,我想要做的是讓用戶輸入一個填字遊戲,讓程序解決它,但我甚至無法通過成功存儲拼圖的第一步。將用戶輸入和動態分配給一個二維數組C

繼承人我的代碼:

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 

    char *userInput = malloc (sizeof(char)*4); 
    // allocates columns with a length of 4? 
    char **grid = malloc(sizeof(char)*4); 
    int i, j; 

    for(i=0; i<4; i++){ 
     scanf("%s", userInput); 
     for (j=0; j<4; j++){ 
      // allocates rows with a length of 4? 
      grid[i] = (char*) malloc (sizeof(char)*4); 
      grid[i][j] = userInput[j]; 
     } 
    } 

    printf("%c", grid[0][2]); 

    return 0; 
} 

它現在硬編碼的,但它會問網格的大小,但它是什麼做的是一個4x4的填字遊戲,並把每個字母爲字符數組,後來它會在拼圖中找到單詞。我現在想要做的就是接受用戶輸入並將其放入網格中。關於我想用我的代碼做什麼的示例是

Input: 
abcd 
efgh 
ijkl 
mnop 

Output: 
c 

但是最終被吐出的是垃圾。

我正在使用代碼塊,但是當我調試malloc數組並且將它們設置爲'watch'時,我不知道它們是什麼。它向我展示了他們在記憶中的位置,但我不知道輸入了什麼,所以我甚至無法檢查發生了什麼。任何幫助,將不勝感激。

+1

'字符**網格= malloc的(的sizeof(char)的* 4);''到的sizeof(字符*)' – luoluo

+0

[請不投射的malloc'()的結果在'C.] (http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc) –

+0

使用'char ** grid = malloc(4 * sizeof * grid);'。避免讓尺寸錯誤。 – chux

回答

0

將數組的分配與數組的填充分開是個好主意。試圖同時做兩件事可能會令人困惑。要分配數組,需要分配4個字符指針,然後每個指針需要指向4個字節的內存。

int rows = 4; 
int cols = 4; 

char **grid = malloc(rows * sizeof(char *)); // 4 char pointers, one for each row 
for (int i = 0; i < rows; i++) 
    grid[i] = malloc(cols);     // each row is 4 characters