Jump to content

problema com arrays de char pointers


ricardoneves93

Recommended Posts

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
Link to comment
Share on other sites

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
Link to comment
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
×
×
  • Create New...

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.