Uradiću i na taj način.
Sada sam implementirao sličan program, samo što reči stavlja u dinamički niz, tj. matricu. Valgrind kaže da je sve dobro, ali meni se ne sviđa rešenje jer nikada nisam video da iko koristi char***. Da li može drugačije da se uradi?
Kod:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define LENGHT 81
#define ALLOCCHECK(x) if ((x) == NULL) exit(-2)
char** add_to_matrix(char** m, char *word, int *n);
void read_line(char*** m, int *n)
{
char input[LENGHT+1], word[LENGHT], *c;
unsigned i;
if (fgets(input, LENGHT-1, stdin) == NULL)
exit(-2);
c = input;
while (1) {
i = 0;
while (*c != ' ' && *c != '\n') {
word[i++] = *c;
c++;
}
word[i] = '\0';
*m = add_to_matrix(*m, word, n);
if (*c != '\n') {
c++;
} else {
break;
}
}
}
char** add_to_matrix(char** m, char *word, int *n)
{
if (m != NULL) {
m = realloc(m, (*n+1)*sizeof(char*));
ALLOCCHECK(m);
*(m + *n) = malloc(sizeof(word)+1);
strcpy(*(m + *n), word);
(*n)++;
} else {
m = malloc(sizeof(char*));
ALLOCCHECK(m);
*m = malloc(sizeof(word)+1);
ALLOCCHECK(*m);
strcpy(*m, word);
(*n)++;
}
return m;
}
int main(void)
{
int n = 0; /*broj elemenata u matrici*/
char** m = NULL; /*matrica*/
read_line(&m, &n);
for (int i = 0; i<n; i++) {
printf("%s\n", *(m+i));
free(*(m+i));
}
free(m);
return 0;
}