我需要一些帮助来使用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
答案 0 :(得分:0)
你需要编写一个辅助函数,给定一个整数n
,一个数字d
,以及一个'足够大'的缓冲区(至少n + 1个字节长) ,是否有格式化'%04d'的工作等。此函数可能使用strcat()
,但可能不会。
你需要一个可以逐步执行格式字符串的主函数,隔离不同的位(基本上,有%-sequences和其他字符)并适当地处理它们。这可能会使用strcat()
,但除非您使用两个缓冲区,否则可能不会使用{ - 1}} - 一个用于保存第一个(辅助)函数的临时结果,另一个用于最终结果。 (我认为不需要使用这两个缓冲区,但它会提供使用strcat()
的借口。)
确保主函数被告知缓冲区有多大,并且它不会溢出缓冲区的边界。如果您确切地知道要复制到的缓冲区中有多少数据,要添加的字符串中有多少数据,以及精确的方式,那么使用strcat()
(或strncat()
)是绝对安全的。你使用的缓冲区是多长的。特别是,strncat()
的接口会引发灾难 - 最后一个(大小)参数不是目标缓冲区的大小(就像在大多数类似的调用中一样);它是缓冲区中剩余的空间量。