From 0acc868df0c86e23044efdeacc7b4e833760564e Mon Sep 17 00:00:00 2001 From: tmeissner Date: Wed, 9 Apr 2014 00:15:11 +0200 Subject: [PATCH] new getline tool with getline() & trim() function --- c_pointers/getline.c | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 c_pointers/getline.c diff --git a/c_pointers/getline.c b/c_pointers/getline.c new file mode 100644 index 0000000..2724e51 --- /dev/null +++ b/c_pointers/getline.c @@ -0,0 +1,78 @@ +#include +#include +#include + + +char *getLine(void); +char *trim(char *phrase); + + +char *getLine(void) { + + const size_t sizeIncrement = 10; + char *buffer = malloc(sizeIncrement); + char *currentPosition = buffer; + size_t maximumLength = sizeIncrement; + size_t length = 0; + int character; + + if (currentPosition == NULL) { + return NULL; + } + + while (1) { + character =fgetc(stdin); + if (character == '\n') { + break; + } + if (++length >= maximumLength) { + char *newBuffer = (char*) realloc(buffer, maximumLength += sizeIncrement); + if (newBuffer == NULL) { + free(buffer); + return NULL; + } + currentPosition = newBuffer + (currentPosition - buffer); + buffer = newBuffer; + } + *currentPosition++ = character; + } + *currentPosition = '\0'; + return buffer; +} + + +char *trim(char *phrase) { + + char *old = phrase; + char *new = phrase; + + while (*old == ' ') { + old++; + } + + while (*old) { + *new = *old; + new++; + old++; + } + + *new = 0; + return (char*) realloc(phrase, strlen(phrase) + 1); +} + + +int main(void) { + + + char *buffer = trim(getLine()); + + if (buffer == NULL) { + printf("%s\n", "out of memory"); + } else { + printf("%s\n", buffer); + free(buffer); + } + + return 0; + +} \ No newline at end of file