Показать сообщение отдельно

  #36  
Старый 02.07.2007, 11:17
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

подскажите вот что:

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);
}
 
Ответить с цитированием