2017-05-15 14 views
-1

私は最初のサイズを持つ動的配列を実装し、{{"aa","bb"},{"cc","dd"},{"ff","gg"}}のような2つの列の配列をここに挿入します。私のcode.the要素は、coorectly配列に格納するように見えますが、 ptr_arr[i][j]のような要素を取得します。配列内の配列のようなchar要素を取得

typedef struct { 
    char **array; 
    size_t used; 
    size_t size; 
} Array; 

void initArray(Array *a, size_t initialSize) { 
    a->array = (char **)malloc(initialSize * sizeof(char *)); 
    int i; 
    for (i = 0; i < 2; i++) { 
     a->array[i] = (char *) malloc(initialSize * sizeof(char *)); 
    } 
    a->used = 0; 
    a->size = initialSize; 
} 

void insertArray(Array *a, char* (*element)[2]) { 
    if (a->used == a->size) { 
     a->size *= 2; 
     a->array = (char **)realloc(a->array, a->size * sizeof(char)); 
    } 
    a->array[a->used++] = *(*element); 

} 

int main(int argc, const char * argv[]) { 
    Array ptr_arr; 
    initArray(&ptr_arr, 1); 
    char *b[] = {"85","9u"}; 
    insertArray(&ptr_arr, &b); 
    printf("%s \n", (ptr_arr.array[0][1])); //this is just i want to use 
    return 0; 
} 
+0

'A->アレイ=(文字**)はmalloc(INITIALSIZE *はsizeof(チャー*))など;' - > 'A->アレイ=のmalloc(sizeof演算子*(A - >配列)* 2); ' – chux

+0

@chux何が問題なのですか?私はそれを得ていませんでした。 –

+0

あなたのコード 'malloc(initialSize * sizeof(char *))'は、1つのポインタを割り当てます。 'malloc(sizeof *(a-> array)* 2);'以下の 'for(i = 0; i <2; i ++)で使用するために2つのポインタを割り当てます{ – chux

答えて

0

2次元アレイが他のアレイへのポインタの配列です。動的に行うには、各行に1次元配列を割り当て、配列(線)のポインタを保持する1次元配列を1つ割り当てる必要があります。そして、あなたはアレイを使用してデータをアクセスもでき

char **Array; 
char *Array_line; 

Array = malloc(initialSizeY * sizeof(char *)); 

for(int i=0; i<initialSizeY; i++) 
{ 
    Array_line = malloc(initialSizeX * sizeof(char)); 
    Array[i] = Array_line; 
} 

[I] [J]配列とJのi番目の行にポイントはj番目は: 何かのようにその行の文字。

この配列を解放するには、最初にそれをクロールし、各行(配列[i])を解放してから、ポインタホルダー配列(配列)を解放する必要があります。

+0

ありがとう、しかし、私はこのような私のコードで何かを行う。 –

+0

詳細: 'int a [3] [4]'は2D配列の例です。 'char ** Array;'では、 'Array'は2D配列ではなく、' char * 'へのポインタです。 – chux

+0

@mike fayya - 正確に何が必要ですか? - 文字の2次元配列、文字列の1次元配列、または2次元配列の文字列?あなたのmain() 'printf("%s \ n "、(ptr_arr.array [0] [1]));'は文字の3D配列である2D文字列配列にアクセスしようとします! –

1

この

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

typedef struct { 
    char* (*array)[2]; 
    size_t used; 
    size_t size; 
} Array; 

void initArray(Array *a, size_t initialSize) { 
    a->array = malloc(initialSize * sizeof(char *[2])); 
    a->used = 0; 
    a->size = initialSize; 
} 

void insertArray(Array *a, char* (*element)[2]) { 
    if (a->used == a->size) { 
     a->size *= 2; 
     a->array = realloc(a->array, a->size * sizeof(char *[2])); 
    } 
    a->array[a->used][0] = element[0][0]; 
    a->array[a->used++][1] = element[0][1]; 
} 

int main(int argc, const char * argv[]) { 
    Array ptr_arr; 
    initArray(&ptr_arr, 1); 
    char *b[] = {"85","9u"}; 
    insertArray(&ptr_arr, &b); 
    printf("%s \n", (ptr_arr.array[0][1]));//9u 
    free(ptr_arr.array); 
    return 0; 
} 
関連する問題