关于使用strcat格式化输出

时间:2010-11-11 12:29:46

标签: c crt

我需要一些帮助来使用strcat函数而不是s来转换以下格式 printf的。

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);

而不是使用sprintf,我必须使用strcat函数的数量获得上面cMsgStamp中存在的相同信息。

任何人都可以帮助我。 谢谢! Venkata RKA

1 个答案:

答案 0 :(得分:0)

你需要编写一个辅助函数,给定一个整数n,一个数字d,以及一个'足够大'的缓冲区(至少n + 1个字节长) ,是否有格式化'%04d'的工作等。此函数可能使用strcat(),但可能不会。

你需要一个可以逐步执行格式字符串的主函数,隔离不同的位(基本上,有%-sequences和其他字符)并适当地处理它们。这可能会使用strcat(),但除非您使用两个缓冲区,否则可能不会使用{ - 1}} - 一个用于保存第一个(辅助)函数的临时结果,另一个用于最终结果。 (我认为不需要使用这两个缓冲区,但它会提供使用strcat()的借口。)

确保主函数被告知缓冲区有多大,并且它不会溢出缓冲区的边界。如果您确切地知道要复制到的缓冲区中有多少数据,要添加的字符串中有多少数据,以及精确的方式,那么使用strcat()(或strncat())是绝对安全的。你使用的缓冲区是多长的。特别是,strncat()的接口会引发灾难 - 最后一个(大小)参数不是目标缓冲区的大小(就像在大多数类似的调用中一样);它是缓冲区中剩余的空间量。