Intanto il codice, molto molto semplice...

codice:
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>

int main()
{
DIR *dir;
struct dirent *file;
struct stat filestat;
char filepath[256], dir_source[128];

    sprintf(dir_source,".");
    if (*dir_source != '\0') {
        /* Leggo tutti i file contenuti nella directory dir_source */
        if ((dir=opendir(dir_source)) == NULL) {
            printf("!>>> Directory %s inesistente o inaccessibile!\n",dir_source);
            return;
        }
        while ((file=readdir(dir)) != NULL) {
            lstat(filepath, &filestat);
            strcpy(filepath, dir_source);
            strcat(filepath, file->d_name);
            printf("Name = %s\n",file->d_name);
            if (!S_ISDIR(filestat.st_mode))
                printf("Leggo file %s\n",filepath);
        }
    }
Mi ritornano sempre i nomi dei file (nelle ultime 2 printf) come una serie di caratteri speciali e lettere a caso... io errori non ne vedo, qualcuno può aiutarmi?