Вы неправильно управляете указателями.
Вы увеличиваете выходной указатель независимо от того, пишете ли вы в него что-либо.
И вы слишком сильно уменьшаете указатель фильтра, когда пытаетесь вернуть его к первому символу после зацикливания на нулевом терминаторе.
И совсем не нужно тратить время и вычислительные мощности, чтобы звонить strlen()
.
Попробуйте вместо этого что-нибудь более похожее:
#include <iostream>
using namespace std;
char* function(char *buffer, const char *str, const char *filter) {
char *b = buffer;
for (; *str; ++str) {
char ch = *str;
for(const char *f = filter; *f; ++f) {
if (ch == *f) {
*b++ = ch;
break;
}
}
}
*b = '\0';
return buffer;
}
int main(){
char d[80];
cout << function(d, "abbccddeeefa", "abd");
return EXIT_SUCCESS;
}