|
|
@ -0,0 +1,78 @@ |
|
|
|
#include <stdlib.h> |
|
|
|
#include <stdio.h> |
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
|
|
|
} |