2011-05-30 4 views
1

J'essaie essentiellement d'obtenir le temps avecproblème const char * en C

struct timeval tv = { }; 
gettimeofday(&tv, NULL); 

Et cela fonctionne. Le problème est que la fonction qui va accepter comme argument le temps est de type const char *

Alors je l'ai fait

const char *time; 
time = &tv.tv_sec; 

Le problème est que tv.tv_sec est de type time_t et i besoin de le brancher

const char *time 

de le transmettre à la fonction qui a besoin const char *

Comment puis-je faire? Placer un nombre entier dans un const const * J'ai essayé quelques méthodes simples de moulage, mais je ne suis pas expérimenté avec C

+0

Vous voulez dire que vous voulez convertir ce 'time_t' en une chaîne, puis envoyer la chaîne à une fonction qui accepte une chaîne comme argument? – rid

+0

Vous devrez convertir les secondes (qui sont un nombre entier) en une chaîne, et passer cela. –

Répondre

2

Pour formater un entier sous forme de chaîne, vous devez utiliser snprintf.

Par exemple:

char resultString[64]; 

snprintf(resultString, sizeof(resultString), "Current time : %d", tv.tv_sec); 
+0

Oui, je reçois db-mysql.c: 144: 2: avertissement: passer l'argument 1 de 'snprintf' rend le pointeur de l'entier sans un cast /usr/include/bits/stdio2.h:62:1: note : attendu 'char * __restrict__' mais l'argument est de type 'char' db-mysql.c: 144: 2: avertissement: le format '% d' attend le type 'int', mais l'argument 4 a le type '__time_t' db-mysql.c: 144: 2: avertissement: le format '% d' attend le type 'int' , mais l'argument 4 a le type '__time_t' – dikidera

+0

@dikidera: Eh bien, vous faites quelque chose de terriblement mal là-bas. Vous devriez poster votre code complet dans votre question. –

+0

C'est essentiellement ** const char timee; const char * timer; ' gettimeofday (& tv, NULL); Snprintf (timee, sizeof (timee), "% d", tv.tv_sec) ; timer = &timee; ** – dikidera

5

Lorsque vous avez besoin de lancer un pointeur temporel dans un pointeur char, c'est un indice qu'il y a quelque chose de très faux. Vous devriez jeter un second regard sur le problème.

Vous ne décrivez pas l'autre fonction qui accepte un const char *, sinon j'aurais une meilleure idée de ce qui se passe.

Je suppose que vous devrez peut-être convertir les entiers de temps en une chaîne de caractères et passer un pointeur au début de cette chaîne. Pour ce faire, vous pouvez utiliser une fonction appelée strftime.

1

fonctions C directement utilisables sont les suivants:

  • ctime (entrée est de type time_t)
  • asctime (entrée est de type struct tm)

Si vous devez d un contrôle sur l'utilisation du format:

  • strftime (entrée est de type struct tm)

Les pages liées contiennent des exemples d'utilisation. La chaîne doit être préallouée.