#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void add_symbol(char **line, char symb, int len)
{
    int new_size = (len+2)*sizeof(char); //+1 for symbol, +2 for \0
    char *line_copy = (char*) malloc(new_size);
    strcpy(line_copy, *line);
    line_copy[len] = symb;
    line_copy[len+1] = '\0';
    *line = (char *) realloc(*line, new_size);
    strcpy(*line, line_copy);
    free(line_copy);
}
void add_row(char ***array, char *line, int rows_amount)
{
    *array = (char**)realloc(*array, sizeof(char*)*rows_amount+1);
    (*array)[rows_amount] = (char*) malloc(sizeof(char*)*strlen(line));
    strcpy((*array)[rows_amount], line);
}
int main()
{
    char input;
    char *final_line = (char*) malloc(sizeof(char)*1);
    final_line[0] = '\0';
 
    int size = 0;
    char **string_array = (char*) malloc(sizeof(char*)*size);
 
    while ((input = getchar()) != '0')
    {
        if (isalnum(input) || input == ' ')
            add_symbol(&final_line, input, strlen(final_line));
        else if (input == '\n'){
            add_row(&string_array, final_line, size);
            printf("New line: %s\n", final_line); //
            final_line[0] = '\0';
            size++;
        }else printf("Invalid input: %c\n", input);
    }
    free(final_line);
    int i;
    for (i = 0; i!=size; i++)
    {
        printf("String array [%i]: %s\n", i, string_array[i]);
        free(string_array[i]);
    }
    free(string_array);
    return 0;
}