Есть массив строк, который нужно загнать в память, не затратив при этом лишнего и в последствии быстро работать с этим массивом.
Делаю массив указателей:
mas=malloc(sizeof(char *) * 4);
и загоняю в него указатели на вновь-созданные блоки памяти
mas[0]=strdup("betta");
все пучком и работает, да вот беда, потом ссылки на элементы массива очень корявые получаются, тяжело с ними работать
Например, в примере ниже приходиться писать в функции сравнения двойной указатель, иначе не работает.
А если нужно работать с символом из строки, то совсем беда.
Если для char k[100]; можно было быстро и аккуратно сделать *k=3; k++;
То с массивом указателей это дело не проходит, приходиться или вводить дополнительные указатели или копировать данные в char tmp[100] для дальнейшей работы.
Подскажите, если выход?
Пример:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void **a1, const void **a2)
{
printf("cmp: %s vs %s\n",*a1,*a2);
return(strcmp(*a1,*a2));
}
void main (void)
{
unsigned char ** mas;
mas=malloc(sizeof(char *) * 4);
if (mas==NULL) {printf("Error 1\n"); exit(-1);}
mas[0]=strdup("betta");
mas[1]=strdup("gamma");
mas[2]=strdup("alpfa");
mas[3]=strdup("tetta");
qsort(mas,4,sizeof(char*),compare);
free(mas[0]);
free(mas[1]);
free(mas[2]);
free(mas[3]);
free(mas);
}
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Правильно ли я организовал выделение памяти? (2014)
- Форум Инициализация константных полей структур (2015)
- Форум ссылки и приведение типов (2010)
- Форум покритикуйте функцию (2009)
- Форум Программа на Си падает, при выделении памяти (2014)
- Форум Чем чревата прямая инкапусляция структур в си? (2016)
- Форум C, Странная проблема с указателями в функции (2008)
- Форум unicode, сортировка и буква ё (2008)
- Форум non-blocking write (2011)
- Форум Как узнать, сколько памяти доступно для выделения? (2005)