You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言将time_t转换为DD/MM/YYYY/HH:mm格式字符串输出被截断问题

问题原因

  • 存在多余的time(&value)调用:你已经通过函数参数传入了待转换的time_t类型值,该调用会直接覆盖传入的参数值为当前系统时间,虽然你本次测试传入的就是当前时间没有触发问题,但如果后续需要转换历史时间戳,该逻辑会完全失效。
  • 核心错误:sizeof(string)使用不符合预期。C语言中数组作为函数参数传递时会退化为指针,sizeof(string)实际获取的是指针的内存长度(64位系统为8字节、32位系统为4字节),而不是你传入的buffer数组的总大小。你需要生成的DD/MM/YYYY/HH:mm格式字符串至少需要17字节(含字符串结束符),远大于指针长度,因此strftime受限于你传入的最大允许长度,输出内容被截断。

修复方案

  1. 删掉多余的time(&value)语句
  2. 给time_to_str函数新增参数传入缓冲区的实际长度,替换原有的sizeof(string)写法
  3. 补充异常判断逻辑,同时完善函数返回值的处理

修复后代码

转换函数

int time_to_str(time_t value, char *string, size_t buf_size)
{
    struct tm *timeinfo;
    timeinfo = localtime(&value);
    if (timeinfo == NULL) {
        return -1;
    }
    return strftime(string, buf_size, "%d/%m/%Y/%H:%M", timeinfo);
}

测试调用代码

time_t variable = time(NULL);
char buffer[100];

if (time_to_str(variable, buffer, sizeof(buffer)) > 0) {
    printf("%s", buffer);
} else {
    printf("时间转换失败");
}

内容的提问来源于stack exchange,提问作者TheDayAfterDark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:48:04