From d5d4368a4e6ee089fcb00618610b66c332304d40 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 17 Mar 2016 11:34:44 +1300 Subject: Got line vector working properly --- sort.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/sort.c b/sort.c index 4c0f50b..c2c55fb 100644 --- a/sort.c +++ b/sort.c @@ -2,32 +2,35 @@ #include #include -#define MAX_LINE_LENGTH 32 +#define MAX_LINE_LENGTH (2 << 8) +#define LINES_VECTOR_SIZE_INITIAL (2 << 6) +#define LINES_VECTOR_SIZE_INCREMENT (2 << 4) static int qsort_strcmp(const void *p1, const void *p2); int main(void) { char **lv; - unsigned long lc; - unsigned int i; + unsigned long la, lc, li; + + la = LINES_VECTOR_SIZE_INITIAL; + lv = (char **) malloc(la * sizeof(char *)); - lv = malloc(sizeof(char *)); for (lc = 0 ; ; lc++) { - fprintf(stderr, "Current char pointers allocated to lv: %lu\n", sizeof(lv) / sizeof(char *)); - if (lc >= sizeof(lv) / sizeof(char *)) { - lv = realloc(lv, (sizeof(lv) + 32) * sizeof(char *)); + if (lc == la) { + la += LINES_VECTOR_SIZE_INCREMENT; + lv = (char **) realloc(lv, la * sizeof(char *)); } - lv[lc] = calloc(MAX_LINE_LENGTH, sizeof(char)); + lv[lc] = (char *) malloc(MAX_LINE_LENGTH * sizeof(char)); if ((fgets(lv[lc], MAX_LINE_LENGTH, stdin)) == NULL) { break; } } - qsort(&lv, lc, sizeof(char *), qsort_strcmp); + qsort(lv, lc, sizeof(char *), qsort_strcmp); - for (i = 0; i < lc; i++) { - fputs(lv[i], stdout); + for (li = 0; li < lc; li++) { + fputs(lv[li], stdout); } exit(EXIT_SUCCESS); -- cgit v1.2.3