Visto che la consegna chiede di fare una funzione che trovi i primi 
tot numeri primi, non sarebbe sensata una cosa tipo questa?
void genera_primi( int *v, unsigned int q ) {
    if( NULL != v ) {
        memset( v, 0, q*sizeof(*v) ); // azzera il contenuto del vettore
        if( 0 < q ) {
            unsigned int i, n;
            *v = 2; // per togliersi dai piedi d'un botto i numeri pari
            for( i=1, n=3; 0<q; n+=2 ) {
                unsigned int j, divisibile = 0;
                for( j=1; j<i && !divisibile; ++j )
                    divisibile = 0==n%v[j];
                if( !divisibile && j==i ) {
                    v[i++] = n;
                    --q;
                }
            }
        }
    }
}
L'idea è avere una funzione che riceva in ingresso l'indirizzo a un vettore di interi con spazio sufficiente per q elementi, vettore nel quale la funzione possa collocare i primi q valori della serie dei numeri primi (2, 3, 5, 7...).