Я пытаюсь написать быструю функцию для фильтрации символа ** и помещения результатов в другой символ **
Это то, что я написал:
/*
-filterable is what is to be filtered
-filter is the filter
-filtered is the result applying the filter to filterable
*/
void filter(const char** filterable,const char * filter,char** filtered)
{
memset(filtered,'\0',sizeof(filtered));
int i=0;
int j=0;
int filter_length=strlen(filter);
int items=sizeof(filterable)/sizeof((char *) filterable); //segfault?
while(items--)
{
if((strncmp(filter,filterable[i],filter_length)==0))
strcpy(filtered[j++],filterable[i]);
i++;
}
}
проблема в том, что я не думаю, что получаю количество строк из «фильтруемого» должным образом, так как я получаю сегментную ошибку.Какие-либо предложения?Является ли это самым быстрым подходом к фильтрации символа **?
Пост-комментарии:
Хорошо, я читаю все комментарии, и, кажется, нижеработатьУчитывая, что это нужно быстро, я добавил ключевое слово register, хотя слышал, что в наши дни это ничего не гарантирует.
void filter(char ** filterable, const char * filter, char ** filtered, int filters)
{
register int i=0;
register int j=0;
int filter_length=strlen(filter);
while(filters--)
{
if((strncmp(filter,filterable[i],filter_length)==0))
strcpy(filtered[j++],filterable[i]);
i++;
}
}