사용자 (콘솔)에서 데이터를 읽으 려합니다. 사용자가 제공 할 수있는 데이터 예제는 다음과 같습니다.형식이 지정된 정수 배열을 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
I 키 배열의 첫 번째 요소라고 말할 수있다.
그러나 입력을 구문 분석하고 메시지 배열을 채우는 방법을 모르겠습니다.
또한 동일한 키가있는 행을 동일한 배열에 저장해야합니다 (그러나 자세한 내용입니다).
1) 일반적으로'malloc' & friends 또는'void *'의 결과를 캐스트하지 마십시오. 2) 너무 광범위하다. 왜 죽을까요? 왜 실패 했나요? – Olaf
'a-> size == 0'이면 UB가 있습니다. – Stargateur
'realloc'가 실패 할 수 있습니다. 'NULL'에 대해 확인하십시오. – Inline