-1

在使用 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 中存在的相同信息。

谁可以帮我这个事。谢谢!文卡塔 RKA

4

1 回答 1

0

您需要编写一个辅助函数,给定一个整数n、多个数字d和一个“足够大”(至少 n+1 个字节长)的缓冲区,执行格式化“%04d”等的工作。这个函数可能会使用strcat(),但可能不会。

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

确保告诉 main 函数缓冲区有多大,并且它不会溢出缓冲区的边界。只有在您准确地知道要复制到的缓冲区中有多少数据、要添加的字符串中有多少数据以及您正在使用的缓冲区总共使用了多长时间时,才可以安全地使用strcat()(或)。strncat()而且,特别是strncat()引发灾难的接口——最后一个(大小)参数不是目标缓冲区的大小(就像在大多数类似的调用中一样);它是缓冲区中剩余的空间量。

于 2010-11-11T15:02:59.103 回答