Il y a un puzzle suivant auquel je pense connaître la bonne réponse mais j'ai aussi un problème. Jetez un oeil:puzzle - temps d'impression sous forme lisible par l'homme en C; ctime, asctime
Sample Code
void printTime(time_t *t)
{
????
}
Lequel des éléments suivants peut remplacer le ???? dans le code ci-dessus pour imprimer le temps passé en t sous une forme lisible par l'homme?
:
char s[ 100 ]; ctime(t, s); printf("%s\n", s);
:
printf("%s\n", ctime(t));
:
printf("%s\n", asctime(t));
:
printf("%s", t);
:
char *s = ctime(t); printf("%s\n", s); free(s);
Ma réponse est la réponse 2 (fonction ctime prend un pointeur time_t en entrée et renvoie un pointeur vers une chaîne de caractères qui peut être imprimée puis par printf).
Le code de la réponse 5 fonctionne aussi bien lors de la compilation, mais pourquoi utiliserons-nous free() si aucun stockage n'a été précédemment alloué? Pensez-vous que c'est la raison pour laquelle la réponse 5 est fausse?
Merci, Przemek
d'entreposage est prévu par ctime (t) ' – Eregrith
Note: il n'a pas été allouée dynamiquement * *, donc' free'ing est faux. 'ctime' utilise un tampon statique (généralement le même pour tous les appels). –
Ce qui est en contraste avec 'ctime_r', le * * rentrante (à savoir thread-safe) version pour laquelle vous fournissez vous-même tampon. – MvG