C strftime具有结束十六进制字符
我正在尝试将C strftime具有结束十六进制字符,c,strftime,C,Strftime,我正在尝试将日期头添加到我的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结束字符 为什么不一致?我
日期
头添加到我的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
没有终止,因此您在任何地方都有未定义的行为,这些行为需要以null结尾的字符串。您有时会看到\x7f
,有时会看到其他字符(可能有时甚至会看到\0
),这纯粹是偶然的
发件人: 根据格式字符串
格式
,将日期和时间信息从给定的日历时间时间
转换为以空结尾的多字节字符串str
。最多写入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
37是只包含文本还是NUL终止符?谢谢!!这是一个新手的错误:)我以为稍后出现的strcpy会添加空字符。