• Viernes 29 de Marzo de 2024, 06:44

Autor Tema:  Conflicto de tipos entre un arreglo de char y un arreglo dinamico de char*  (Leído 2455 veces)

michal

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
0
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