Проблема в том, что sen
у вас в read_data
на самом деле не тот же, что у вас в main
- это просто копия. Тот, который у вас есть в main
, остается неизменным по сравнению с его первоначальным значением - что на самом деле означает, что он состоит из ненужных значений. Очень простой способ исправить это - изменить read_data
таким образом, чтобы вместо Sentences
в качестве значения он создавал Sentences
и возвращал его - тогда main
может просто использовать то, что возвращает read_data
. Это выглядело бы так:
struct Sentences read_data(char str[SIZE]) // main function
{
struct Sentences sen;
int c;
scanf("%d", &c);
sen._num_of_sentences = c;
sen._data = (char**) malloc (c * sizeof (char*));
if(sen._data == NULL) //if not enough memory then call error function
terminate();
fgets(str, SIZE, stdin); //get string
scanf ("%[^\n]%*c", str);
return sen;
}
int main()
{
struct Sentences sen; //structure storage
char str[SIZE] = {0}; // string storage array
sen = read_data(str); //call read data function
copy_n_print_data(sen,str);
free_data(sen); // call free memory function
return EXIT_SUCCESS;
}
Другая вещь, которую вы могли бы сделать, это вместо этого передать ее через указатель, убедившись, что вы фактически манипулируете одним и тем же struct Sentences
в обеих функциях:
void read_data(struct Sentences* sen,char str[SIZE]) // main function
{
int c;
scanf("%d", &c);
sen->_num_of_sentences = c;
sen->_data = (char**) malloc (c * sizeof (char*));
if(sen->_data == NULL) //if not enough memory then call error function
terminate();
fgets(str, SIZE, stdin); //get string
scanf ("%[^\n]%*c", str);
}
int main()
{
struct Sentences sen; //structure storage
char str[SIZE] = {0}; // string storage array
read_data(&sen,str); //call read data function
copy_n_print_data(sen,str);
free_data(sen); // call free memory function
return EXIT_SUCCESS;
}