Jump to content

Recommended Posts

Posted

Boas como consigo devolver uma string para depois imprimir as horas noutras funções ?

int main (int argc, char * argv[])
{

   printf("foi efectuada a saida as %s", horas());
}

horas.c

const char * horas() {
time_t horatual;
struct tm * formato; // Ponteiro para a estrutua http://www.cplusplus.com/reference/ctime/tm/
char stringhoras[9];  // Espaço para guardar as horas no formato "HH:MM:SS\0"

horatual = time(NULL); // Se a função devolver -1, dava erro. (não estou a fazer o check).
formato = localtime(&horatual);

strftime(stringhoras, sizeof(stringhoras), "%H:%M:%S", formato); // Onde vai guardar , o tamanho do que vai guardar(podia por 9 directamente, mas não se tornava genérico), output format, a onde vai buscar a string).
puts(stringhoras);

   return stringhoras;

}

output actual

foi efectuada a saida as ☺ ( o boneco até parece que está a gozar comigo)

Posted (edited)

O teu problema é que o array stringhoras só existe dentro da função horas().

Quando fazes return stringhoras; o array é automaticamente convertido para um ponteiro para o seu primeiro elemento, e é esse ponteiro que é devolvido. Mas imediatamente a seguir o array deixa de existir, fazendo o ponteiro apontar para um endereço inválido.

A meu ver, a melhor solução passa por definires o espaço para a string na função chamadora e preencheres esse espaço dentro da tua função

/* destin deve apontar para um espaço de memória com pelo menos 9 caracteres */
void horas(char *destin) {
   /* mais ou menos o mesmo que já tens */
   strcpy(destin, stringhoras);
}

e depois chamas a função, por exemplo, assim

int main(int argc, char **argv) {
   char hora[20];
   horas(hora);
   printf("hora: %s\n", hora);
}
Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

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.