Всем привет.
Написал программу, которая выделяет память под двумерный массив и
сохраняет в него имена. Размер выделяемой памяти зависит от количества и
длины слов, которое определяется пользователем. Программка рассчитана
на сохранение n-го количества слов, которое также определяется
пользователем в начале программы (при запуске).
Вот, собственно, и сам код программы:
Код
#include <stdio.h>
#include <string.h>
// функция выделения памяти для одного слова. На входе m - количество букв, определенное с помощью strlen(). *mass - указатель на указатель
void memory_for_string(char *mass, int m)
{
*mass = (char *)malloc((m+1)*sizeof(char)); // прибавляем к переменной 'm' 1 для выделения места под знак конца строки
}
int main(void)
{
int m=0, n=0, i=0;
char **mass, str[20]; // **mass - указатель на указатель. str - временный массив для определения длины введенного слова
puts("Please, enter a number of strings"); // пожалуйста, введите число строк
scanf("%d", &n);
fflush(stdin); // очищаем стандартный поток после scanf()
mass = (char *)malloc(n*sizeof(char *)); // выделяется память под массив указателей, адрес первой ячейки сохраняется в mass
while(i<n) // выполнять, пока не введено n-е количество имен
{
printf("Please, enter the name %d: ", i+1); // пожалуйста, введите i-е имя
gets(str); // сохраняем введенное слово
m = strlen(str); // определяем длину слова и сохраняем в m
memory_for_string(mass+i, m); // запускаем функцию для выделения памяти под длину слова
strcpy(*(mass+i), str); // копируем слово в выделенную память
i++;
}
i=0;
while(i<n)
{
printf("\nThe name %d is: %s", i+1, *(mass+i));
i++;
}
return 0;
}
Все подробно прокомментировал. Программка выполняется только если вводить два имению Если больше - зависает. Видимо у меня где-то ошибка в
понимании указателей или функции malloc(). Прошу помочь найти ошибку в
коде.
Спасибо.