Выполнить сортировку массива строк - C (СИ)
Формулировка задачи:
Доброго времени суток
Поставили предо мной такую задачу
"В ходе выполнения лабораторной работы потребуется выполнить сортировку массива строк. Для ускорения этой операции обычно используется дополнительный массив указателей. В этом случае вместо перестановки двух строк с помощью функции strcpy() используется перестановка указателей обычным присваиванием."
в связи с этим встал вопрос о создании динамического массива строк с (на чистом си) с помощью функций malloc() и free()/
Как это сделать?
Число строк заранее не известно может быть 1 2 3 или 20
длинна этих строг так же под вопросом одна строка может быть длиной 1 символ и следующая 100
в общем как захочется проверяющему
Я так понимаю нужен двумерный символьный динамический массив но затрудняюсь как сделать чтобы строки и количество элементов в них расширялось в процессе работы программы
пишу это но не компилируется ругается на указатель
очень нужна помощь так как сам додуматься не могу((
int main ()
{
int i,j;
char **p [i][j];
p = (char (**)[10]) malloc(100*sizeof(int));
getch();
return 0;
}Решение задачи: «Выполнить сортировку массива строк»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
int main(void)
{
setlocale (LC_ALL, "RUS");
int strok=3; //Количество строк в массиве
int len=255; //Длина строки
char **Massiv = (char**)malloc(strok * sizeof(char*));
for (int i=0;i<strok;i++)
Massiv[i] = (char*)malloc(len * sizeof(char*)); //Выделяем память под количество символов в строке для каждой строки в отдельности
printf("Вводимое количество строк = %d \n",strok);
for (int i=0;i<strok;i++) scanf("%s",Massiv[i]); //Считываем строки с клавиатуры в массив
printf("\n\\ПОЛУЧЕННЫЙ МАССИВ\n");
for (int i=0;i<strok;i++)
printf("%s \n",Massiv[i]); //Выводим массив на экран
for (int i=0;i<strok;i++) free(Massiv[i]); //Освобождаем память
free(Massiv);
system("PAUSE");
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с памятью и вводом/выводом данных.
- Установка локали на русский язык.
- Объявление переменных:
- strok - количество строк в массиве;
- len - длина строки.
- Выделение памяти под массив указателей на строки.
- В цикле выделяем память под каждую строку в массиве строк.
- Считываем строки с клавиатуры и сохраняем их в массиве.
- Выводим полученный массив на экран.
- Освобождаем память, выделенную под каждую строку в массиве строк.
- Освобождаем память, выделенную под массив указателей на строки.
- Ожидание нажатия клавиши для завершения работы программы.