diff --git a/c_pointers/getline.h b/c_pointers/getline.h new file mode 100644 index 0000000..bc5c58d --- /dev/null +++ b/c_pointers/getline.h @@ -0,0 +1,59 @@ +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; + + // skip blank chars + while (*old == ' ') { + old++; + } + + while (*old) { + *new = *old; + new++; + old++; + } + + // set string end char + *new = 0; + + return (char*) realloc(phrase, strlen(phrase) + 1); +} \ No newline at end of file