我有一个函数,我需要为另一个日志记录函数返回时间,它看起来像这样:
//put time in to buf, format 00:00:00\0
void gettimestr(char buf[9]) {
if(strlen(buf) != 9) { //experimental error checking
fprintf(stderr, "Buf appears to be %d bytes and not 9!\n", strlen( buf ));
}
time_t cur_time;
time(&cur_time);
struct tm *ts = localtime(&cur_time);
sprintf(buf, "%02d:%02d:%02d",
ts->tm_hour,
ts->tm_min,
ts->tm_sec );
strncat(buf, "\0", 1);
}
现在我想主要的问题是检查缓冲区是否足够长,sizeof() 返回一个指针大小,而 strlen 似乎在两个不同的调用中随机返回 0 或诸如 12 之类的东西。
我的第一个问题是,我怎样才能安全地检测缓冲区的大小,这可能吗?
我的另一个问题是,接受 buf[9] 是一种有利的方法还是应该接受指向缓冲区的指针,并使用 strcat() 而不是 sprintf() 来附加时间?sprintf 使时间值更容易填充零,尽管它似乎只接受字符数组而不接受指针。