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受限于你传入的最大允许长度,输出内容被截断。
修复方案
- 删掉多余的
time(&value)语句 - 给
time_to_str函数新增参数传入缓冲区的实际长度,替换原有的sizeof(string)写法 - 补充异常判断逻辑,同时完善函数返回值的处理
修复后代码
转换函数
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
相关产品推荐
相关产品推荐

