No, la funzione quantiCar deve restituire un intero, indicante, quante volte il carattere passato è presente nella stringa passata!

Detto ciò, per fare quello che chiedi tu con l'allocazione si potrebbe fare:

codice:
char* temp = nome, result;
int n = 0, i = 0, j;

j = 0;
while (nome[j] != '\0')
{
       if (quantiCar (temp, nome[j]) > 1) n++;
       j++;
}

result = (char*) malloc (sizeof(char)*n);
Poi mi sa che il compilatore si incasina un po' con i puntatori nel pezzo di codice che avevo scritto prima, quindi dovresti fare tipo:



codice:
j = 0;
while (nome[j] != '\0')
{
        if (strchr (result, nome[j]) != NULL) /* strchr (char* s, char t) ritorna il puntatore alla prima  
               j++;                                occorrenza di t in s, o NULL se t non è presente */

        else if (quantiCar (temp, nome[j]) > 1)
        {
                result[i] = nome[j];
                i++;
                j++;
        }

        else 
               j++;
}

result[i] = '\0';

Lascio a te la funzione 'quantiCar' dai