
02.07.2007, 11:17
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
подскажите вот что:
entries = (char**)realloc(entries, arr_size*sizeof(char*));
такой строкой я заново переопределяю массив указателей entries или к нему как-то добавляется свободное место?
мне нужно в цикле добавлять в динамический массив указатели и каждый раз увеличивать его размер.
а дальше вот функция, которую я родил, если не лень, попробуйте скомпилить и скажите почему она ничего не выводит:
Код:
#include "stdio.h" // ввод/вывод
#include "stdlib.h" // работа с памятью
char ** fndr(char *s1, char *s2, int *n_entrs)
{
char ** entries = NULL; // массив с указателями на вхождения
int arr_size = 2; // изначально его размер 0
int counter = 0; // счётчик записей
int destroy = 0; // если все буквы совпали то она равна нулю
for(int s1_len=0;s1[s1_len] != '\0'; s1_len++); // s1_len - длина первой строки
for(int s2_len=0;s2[s2_len] != '\0'; s2_len++); // s2_len - длина второй строки
for (int i=0; i<s1_len; i++)
{
if(s1[i] == s2[0]) // если совпал первый символ
{
for(int g=0; g<s2_len; g++)
{
if(s1[i+g] != s2[g])
destroy = 1;
}
if(!destroy)
{
if(counter >= arr_size)
{
arr_size *= 2;
entries = (char**)realloc(entries, arr_size*sizeof(char*)); // добавление памяти
}
entries[counter] = &s1[i]; // добавление указателя в массив
counter++; // счотчик инкрементируем
}
}
} // конец перебора первой строки
*n_entrs = counter;
return entries;
}
void main()
{
char s1[] = "my house is you house in you house is wife";
char s2[] = "house";
char ** entries; // массив с указателями на вхождения
int n_entrs = 0; // кол-во вхождений
entries = fndr(s1, s2, &n_entrs);
for (int n=0; n<n_entrs; n++)
printf("%s \n", entries[n]);
free(entries);
}
|
|
|