Hola a todos, necesito ayuda con este código. Quiero hacer una función que me devuelva un arreglo de char*. Lo que necesito es guardar los nombres de los archivos, que están en un directorio, en un arreglo dinámico de char* y que la función lo devuelva, para luego ser procesado(en mi caso solo mostrarlos por ahora)
Estoy usando dev-c++ y C como lenguaje.
el programa compila pero al depurarlo o ejecutarlo me da un error extraño de segmentación de memoria
#include <stdio.h>
#include <stdlib.h>
#include<io.h>
unsigned short int FileCount(char *);// función que devuelve la cantidad de ficheros en un directorio
char ** testFunc(); //la función que devuelve el arreglo dinámico de char*
int main(int argc, char *argv[])
{
int i;
int cantFiles = FileCount("*.*");
//char** ptrArray1 = testFunc("*.*",cantFiles);
char** ptrArray1 = (char**)malloc(sizeof(char)*cantFiles);
ptrArray1 = testFunc("*.*",cantFiles);
//strcpy(ptrArray1,testFunc("*.*"));
//for(i=0;i<3;i++)
{
//printf("%s\n",ptrArray1
); // <----- conflicto de tipos
}
system("PAUSE");
return 0;
}
//----------------------------------------------------------------------
unsigned short int FileCount(char *ruta)
{
int done,p =0,cantFiles =0;
struct _finddata_t a;
intptr_t myHandle = _findfirst(ruta,&a);
while(done != -1)
{
p = strlen(a.name);
if(p>2) //para eliminar los punticos ". y .. en la lista de ficheros, no quiero que los guarde en el arreglo dinámico"
cantFiles++; //cantidad de ficheros dentro del directorio para saber el tamaño del arreglo dinámico de char*
done = _findnext(myHandle,&a);
}
_findclose(done);
_findclose(myHandle);
return cantFiles;
}
//-----------------------------------------------------------------------
char ** testFunc(char *ruta,int cantFiles)
{
int done=0,p =0,i=0;
//cantFiles = FileCount("*.*");
char** ptrArray = (char**)malloc(sizeof(char)*cantFiles);
struct _finddata_t a;
intptr_t myHandle = _findfirst(ruta,&a);
while(done != -1)
{
p = strlen(a.name);
if((p>2){
ptrArray = a.name; // <----- conflicto de tipos
//strcpy(ptrArray,a.name); // <----- conflicto de tipos
//printf("%s\n",a.name); // <----- esto si funciona
i++;
}
done = _findnext(myHandle,&a);
}
_findclose(done);
_findclose(myHandle);
return ptrArray;
}
gracias