Non dovresti mai restituire il puntatore di una variabile definita nello stack, perchè potrebbe non avere più i valori che ti aspetti una volta terminata la funzione. In questo caso creala nell'heap (e ricordati di liberarne la memoria):
codice:int *cardinalitalettere(char *p, int NUM) { int i, k, t; //int vettore_numerativo[NUM]; //v = vettore_numerativo; int *v = (int*)malloc(sizeof(int) * NUM); ... } int main(){ ... free(c); return 0; }