Grazie, non l' avevo notato.
Ho modificato il codice così:

codice:
counted=(bool*) calloc (strlen(parola[k-1]),sizeof(bool));
    while( parola[k][h] != '\0')
    {  
        while( parola[k-1][m] != '\0')
        {
            if( parola[k-1][m] == parola[k][h] && !counted[m])
            {
                carattere++;
                counted[m]=true;
                break;
            }
            m++;
        }
        h++;
        m=0;
    }
    free(counted);
Però è da riadattare per l' utente perché è dispendioso allocare ogni volta un array di bool, la cosa si potrebbe gestire con un array di dimensioni fisse, premesso che si conosce la dimensione massima che ogni stringa può avere.
Da notare che il break dentro l' if è fondamentale, altrimenti come diceva torn, conterebbe due volte la stessa lettera nell' esempio di "cane" e "carniera".
Se invece non c'era l' array di booleani, contava due volte lastessa lettera nel caso di "ccane" e "carniera".