Salut,
Tout le monde n'a pas un nunux sous la main. Par exemple, moi, j'en ai pas un, mais plusiseurs. Heu, bon, bref...
Tu devrais compiler avec -Wall et prendre en compte les warnings. Cela permet de corriger des problèmes, de clarifier le code en levant des ambiguitées...
En général, on ne mélange pas les déclarations et le code, encore que par défaut, certains compilateurs l'accèptent.
En plus de -Wall, on peut utiliser -ansi et -pedantic pour lever encore plus d'erreurs et faire du code théoriquement plus portable. Parce que sinon le compilo compile vraiment n'importe quoi : il invente des inclusions de headers, link on ne sait comment... L'orgie quoi. Sachant quand même que le côté chiant de la chose est que les commentaires // bien pratiques ne sont plus acceptés... On peut utilier -std=c99 à la place de ansi si on y tient.
C'est comme cela que l'on se rend compte par exemple que lstate n'est pas une fonction ISO par exemple... Je sais pas s'il existe un équivalent ISO (Soit dit en passant, c'est un peu moche de chercher à faire une erreur pour vérifier quelque chose), mais on peut utiliser #undef __STRICT_ANSI__ pour accèder aux fonctions non ISO tout en compilant quand même à peu près en ISO...

Les commentaires pas indentés me cassent les yeux, mais bon, c'est une question d'habitudes...
Bon, on va pouvoir s'attaquer au problème !

Bin tout bêtement, tu utilises strrchr pour chercher '.', mais tu ne teste pas si il y en a un dans la chaîne.
Je t'invite à t'orienter du côté de la compilation avec -g et à l'utilisation de ddd pour traiter tes futurs seg fault. Ou essayer Code::Blocks sous nunux. Ou passer sous Windows.

#undef __STRICT_ANSI__
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#define MAXNAME 100
int main(int argc, char **argv){
/* Déclaration des variables */
int nbProc;
struct stat buf;
struct dirent *ent;
char nom[MAXNAME];
char *ext;
char *nomRep;
DIR *rep;
char* tmp;
/* Test des arguments */
if(argc!=4){
printf("Usage: crypte rep_depart ext nbProc \n");
exit(2);
}
/* On transtype le nombre de processus */
nbProc = atoi(argv[3]);
/* On stock l'extension en variable */
ext = argv[2];
/* On stock le nom du repertoire */
nomRep = argv[1];
/* Ouverture du dossier */
rep = opendir(nomRep);
/* Test si le dossier s'ouvre correctement */
if(!rep){
/* On signale l'erreur */
perror("opendir");
}
/* Tant qu'il ya des fichiers */
ent=readdir(rep);
while(ent)
{
/* On construit l'adresse du fichier */
strcpy(nom,nomRep);
/* Si le fichier est différent de ./ ou ../ */
if(strcmp(ent->d_name,".") && strcmp(ent->d_name,"..")){
strcat(nom,"/");
strcat(nom,ent->d_name);
/* lstat permet d'éviter de compter les liens symbolique */
if(lstat(nom, &buf)!=-1){
/* Si c'est un fichier */
if(S_ISREG(buf.st_mode)){
tmp = strrchr(ent->d_name,(int)'.');
if (tmp){
tmp++;
if(strcmp(tmp,ext)==0)
printf("%s \n",nom);
}
}
}
}
ent = readdir(rep);
}
/* On ferme le repertoire */
closedir(rep);
return 0;
}