Jump to content
  • 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

Recommended Posts

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

Edited by ricardoneves93

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens arrays de ponteiros para chars, estás a alocar memória para guardar as strings ?


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

Share this post


Link to post
Share on other sites
ricardoneves93

pelo modelo de código apresentado, sim

Mas como é que sei o numero de bytes que tenho de alocar? 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?

Share this post


Link to post
Share on other 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;

Edited by HappyHippyHippo

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.