ユーザー(コンソール)からデータを読み取ろうとしています。ユーザーのデータ例は次のとおりです。Cで整数の書式付き配列を読み取る
0 : [ 83, 42, 7 ]
21:[3, 6, 8, 12, 9, 3, 6, 8, 12]
63 : [ 8, 12, 9, 3, 6, 8 ]
0 : [ 20, 31, 70 ]
入力はEOFで終了します。
整数の配列([]内の配列)とデータの行数はわかりません。私は行の最初の数字であるキーで配列を(大括弧 - []内の整数)に保存したい。動的配列を書き込む
は問題ではありません。
typedef struct {
int *array;
size_t used;
size_t size;
} Array;
void initArray(Array *a, size_t initialSize) {
a->array = (int *)malloc(initialSize * sizeof(int));
a->used = 0;
a->size = initialSize;
}
void insertArray(Array *a, int element) {
if (a->used == a->size) {
a->size *= 2;
a->array = (int *)realloc(a->array, a->size * sizeof(int));
}
a->array[a->used++] = element;
}
void freeArray(Array *a) {
free(a->array);
a->array = NULL;
a->used = a->size = 0;
}
、その後のint main()の:
Array messages;
initArray(&messages, 10);
insertArray(&messages, x); // x is the number we are reading
私はキーが配列の最初の要素であると言うことができます。
しかし、私はどのように入力を解析し、メッセージの配列を埋めるのかわかりません。
また、同じキーを持つ行は、同じ配列に保存する必要があります(ただしこれは詳細です)。
1)一般的に 'malloc'&friendsや' void * 'の結果をキャストしないでください。 2)広すぎる。あなたが何を試して死ぬのですか、それはなぜ失敗しましたか? – Olaf
'a-> size == 0'ならあなたはUBです。 – Stargateur
'realloc'は失敗し、' NULL 'と照合します。 – Inline