Void main()
{ int k, i, res; //tab – статичний масив покажчиків
char *str = (char*)malloc(80), * tab[10];
clrscr();
printf(“\nВкажіть кількість імен, не більше 10:”);
scanf(“%d”, &k); //введення кількості імен
printf(“Кількість імен=%d\n”,k); // виведення кількості імен
for(i=0; i<k; i++)
{ printf (“Введіть %d-e ім’я: ”,i+1);
res = scanf(“%s, str”); //введення рядка
if (res==1) //контроль успішності введення рядка
{ tab[i]=(char*) malloc(strlen(str)+1); //виділення ОП рядку
strcopy (tab[i], str); //копіювання рядка в динамічний масив
}
}
printf(“\n Введені такі імена:\n”);
for(i=0; i<k; i++)
{ printf(“%s”, tab[i]); //виведення і-го рядка
free(tab[i]);} //вивільнення ОП і-го рядка
free(str); //вивільнення ОП str
printf(“\n Для завершення натисніть будь-яку клавішу\n”);
getch();
}
В програмі використовуються змінні:
- tab – ім’я статичного масиву із 10 покажчиків на дані типу char
- tab[i] – елемент масиву tab буде зберігати значення покажчика на початок значення і-го рядка
- str – скалярний покажчик-змінна на дані типу char
- i – змінна для перебору номерів рядків масиву tab
- k – кількість рядків динамічного масиву
- res – змінна для визначення вдалого введення рядка.
Для створення вільного масиву рядків в режимі діалогу з клавіатури вводиться значення k – кількість рядків вільного масиву. Воно повинно бути не більше 10-ти – кількість елементів tab – масиву покажчиків. Потім воно виводиться на екран. Для формування масиву із k вільних рядків організується перебір номерів рядків по і від 0 до (k-1). Для кожного і-го рядка:
в режимі діалогу змінну str вводиться чергове ім’я;
для формування чергового і-го рядка вільного масиву:
А. з допомогою функції malloc виділяється ОП на кількість введеного рядка str, яке визначається за допомогою функції strlen.
Б. адреса розміщення елементів і-го рядка розміщується в tab[i] – елемент масиву покажчиків за допомогою функції malloc.
В. в ОП, виділену для і-го рядка, копіює значення str чергового введеного рядка за допомогою функції strcopy.
Після завершення створення вільного масиву рядків відбувається виведення його значень на екран і вивільнення ОП, виділеної кожному і – му рядку. Для цього перебираються значення і-номерів рядків масиву від 0 до (k-1). Кожне значення виводиться на екран за допомогою printf(“%s”, tab[i]); для кожного і-го рядка ОП вивільняється за допомогою оператора free(tab[i]).