2010-11-11 23 views
-1

J'ai besoin d'aide pour convertir le format suivant en utilisant la fonction strcat au lieu de s printf.En ce qui concerne le formatage de sortie en utilisant strcat

const char* const MSG_STAMP_PRINTF_FORMAT = "%c %04d-%02d-%02d %02d:%02d:%02d.%03d"; 

char cMsgStamp[500]; 
char cSevChr = 'I'; 

struct tm gmt; 

// Calculate Day/Hour/Min/Sec 
gmtime_r((time_t *)&pMsg->iSysTimeSec, &gmt); 

int iSysTimeMs = 100; 

// Format the begining of the message, the message stamp 

sprintf(&cMsgStamp[0], 
     MSG_STAMP_PRINTF_FORMAT, 
     cSevChr, gmt.tm_year+1900, gmt.tm_mon + 1, gmt.tm_mday, gmt.tm_hour, gmt.tm_min, gmt.tm_sec,iSysTimeMs 
      ); is 0x%s\n", n3); 

au lieu d'utiliser sprintf, je dois obtenir même information qui est présent dans cMsgStamp ci-dessus en utilisant nombre de fonctions strcat.

quelqu'un peut m'aider à ce sujet. Merci! Venkata RKA

+1

Est-ce ce devoir? Je ne peux pas penser à une autre raison pour laquelle vous voudriez faire cela? – Glen

+0

Qu'avez-vous déjà fait et qu'est-ce qui ne fonctionne pas en ce moment? – sharptooth

+0

Demandez-vous essentiellement "comment implémenter' sprintf'? " –

Répondre

0

Vous devez écrire une fonction auxilliaire que, étant donné un nombre entier n, un certain nombre de chiffres d, et un tampon qui est « assez grand » (au moins n + 1 octets), fait le travail de la mise en forme '% 04d', etc. Cette fonction peut utiliser strcat(), mais probablement pas.

Vous avez besoin d'une fonction principale qui peut parcourir la chaîne de format, en isolant différents bits (en principe, il y a% -sequences et autres caractères) et en les traitant de manière appropriée. Cela peut utiliser strcat(), mais probablement pas, sauf si vous avez deux tampons en cours d'utilisation - un pour contenir les résultats temporaires de la première fonction (auxiliaire) et un pour le résultat final. (Je ne vois pas le besoin d'utiliser les deux tampons, mais cela servirait d'excuse pour utiliser strcat().)

Assurez-vous que la fonction principale est indiquée à la taille du tampon et qu'elle ne déborde pas les limites de son tampon. Il est seulement sûr d'utiliser strcat() (ou strncat()) si vous savez exactement combien de données il y a dans le tampon que vous copiez, combien de données il y a dans la chaîne que vous ajoutez, et précisément combien de temps le tampon que vous utilisez est complètement . Et, en particulier, l'interface à strncat() invite catastrophe - le dernier argument (taille) n'est pas la taille du tampon cible (comme c'est le cas dans la plupart des appels similaires); c'est la quantité d'espace restant dans le tampon.