我想一个Date
头添加到我的HTTP响应。到目前为止,我一直在做这样的事情:
char timebuf[37];
time_t now = time(0);
struct tm tm = *gmtime(&now);
strftime(timebuf, sizeof timebuf,"Date: %a, %d %b %Y %H:%M:%S %Z\r\n", &tm);)
然而,检查timebuf时,我是,有时(例如在服务器的第一请求),接收结束字符一个\x7f
。
这是为什么不一致?我有双重检查timebuf的大小,它应该是完全37。
你已经证明我们的格式字符串将导致长度37的字符串不包括空终止符。
你的阵列应该有38元!
目前您的timebuf
留下未终止的,所以你必须未定义行为任何地方,需要一个空结尾的字符串。那你有时看到\x7f
和其他字符有时(大概有时甚至\0
)只是纯粹的机会。
从cppreference.com's C documentation on strftime
:
从给定的日历时间
time
到一个空终止多字节字符串str
根据格式字符串format
的日期和时间信息转换。截至count
写入字节。
这里有一些资金:
Substr Length
---------+--------
"Date: " 6
"%a" 3
", " 2
"%d" 2
" " 1
"%b" 3
" " 1
"%Y" 4
" " 1
"%H" 2
":" 1
"%M" 2
":" 1
"%S" 2
" " 1
"%Z" 4
"\r\n" 2
NULL term. 1
-----------------
= 38