2016-12-02 9 views
0

動的な2D配列の文字、最大200を使用してスキャンしたいと思います。 私はこれを行う方法を本当にわからない、すべては私が動的配列を定義することです思い付いた(と、それは右であれば私も知りません):C - 動的2D配列の文字と割り当てのスキャン

char **arr = (char **)malloc((len+1) * sizeof(char*)); 
    for (i=0; (len+1)>0; i++) 
    char *arr1 = (char *) malloc ((len+1) * sizeof(char)); 

しかし、私はに何を確認していません(len)を入れてみましょう - スキャンされた入力に応じて、51x150の配列が欲しいとしましょう。 スキャンした値に基づいて配列を割り当てて印刷するにはどうすればよいですか?

入力の例:

####.#...## 
##.##.#.### 
##.###.#.## 
#.##.##.#.. 

答えて

2

はおそらく、実際の2D配列ではなく、セグメント化ルックアップテーブルを使用します。

size_t x = 51; // user input 
size_t y = 150; // user input 

char (*arr)[y] = malloc(sizeof(char[x][y])); 
... 
arr[i][j] = something; 
... 
free(arr); 

これは、セグメント化ルックアップテーブルよりもはるかに高速で安全です。これにより、たとえそのデータが1行よりも大きい場合であっても、配列の内外のデータをmemcpyにすることができます。

+0

入力のサイズに応じて、配列のサイズを定義する必要があります。したがって、私が提供した例では、配列は size_t x = 11と割り当てられます。 size_t y = 4; – Darxor

+2

@Darxorはい、これはこのコードの機能です。単にscanf、fgetsなどでxとyの代入を置き換えます。 – Lundin

関連する問題