Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ricardoneves93

problema com arrays de char pointers

Mensagens Recomendadas

ricardoneves93

Bom dia, estou a ter o seguinte problema, quero copiar para cada posição de 2 arrays que estão como variáveis globais, uma data de modificação de um dado ficheiro dentro de uma directorio(FileData), e o nome desse mesmo ficheiro(FileName), porém existe o seguinte problema, antes de copiar para o array FileData a data correspondente estou a fazer um printf, esse printf está a dar valores correctos, porém quando copio esses valores para o array FileData, e de seguida faço um printf do seu conteudo, o conteudo é o mesmo em todas as posições, sendo este a ultima data do ultimo ficheiro a ser monitorizado. O que a função recebe é um directorio de uma pasta.

Obrigado pela disponibilidade.

char *FileName[1000];
char *FileDate[1000];
void updateInfo(char *initFolder)
{
 DIR *srcFolder;
 struct dirent *content;
 struct stat st;
 char tempDate[26];
 int numberFiles = 0;
 int i;

 srcFolder = opendir(initFolder);
 if (srcFolder==NULL)
  {
  printf("BAD OPENDIR %s\n",initFolder);
  }

while ((content = readdir(srcFolder))!=NULL)
{

  chdir(initFolder);
  stat(initFolder,&st);

  if (stat(content->d_name,&st)<0)
  {
	printf("BAD STAT\n");
  }


  if (S_ISREG(st.st_mode)) //IT's A REGULAR FILE
  {

 strftime(tempDate, sizeof tempDate, "%Y_%m_%d_%H_%M_%S", localtime(&st.st_mtime));
 printf("------>%s\n", tempDate);
 printf("------>%s\n", content->d_name);
 FileDate[numberFiles] = tempDate;
 FileName[numberFiles] = content->d_name;
 //printf("<------%d\n", numberFiles);
 numberFiles++;
  }



}

for(i = 0; i<10000; i++)
{
  printf("%s\n", FileName[i]);
  printf("%s\n", FileDate[i]);
  if(FileName[i+1] == NULL && FileDate[i+1] == NULL)
break;
}

}

Exemplo de saida:

------>2013_04_11_23_14_14

------>arroz~

------>2012_12_05_13_59_25

------>02 - My Gun Go Off.mp3

------>2011_03_15_17_44_14

------>01 - Intro.mp3

------>2013_04_14_18_23_38

------>Ficheiro3

------>2013_04_11_23_14_10

------>Ficheiro2

------>2013_04_11_23_14_10

------>Massa~

------>2013_04_14_00_04_14

------>Ficheiro4

------>2013_04_15_00_27_26

------>teste

------>2013_04_13_23_31_18

------>Ficheiro1c

arroz~

2013_04_13_23_31_18

02 - My Gun Go Off.mp3

2013_04_13_23_31_18

01 - Intro.mp3

2013_04_13_23_31_18

Ficheiro3

2013_04_13_23_31_18

Ficheiro2

2013_04_13_23_31_18

Massa~

2013_04_13_23_31_18

Ficheiro4

2013_04_13_23_31_18

teste

2013_04_13_23_31_18

Ficheiro1c

2013_04_13_23_31_18

Editado por ricardoneves93

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Mas como é que sei o numero de bytes que tenho de alocar?

pelos exemplos que apresentaste, necessitas de 20 bytes (19 para os caracteres e 1 para o '\0' final)

E por que razão só está a guardar a ultima data? Será por só ter espaço para uma data e elas vão-se consecutivamente substituindo umas ás outras?

porque estás a guardar um ponteiro sempre para a mesma posição de memória.

 FileDate[numberFiles] = tempDate;
 FileName[numberFiles] = content->d_name;

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.