c - 时间进入字符串与 HH :MM:SS format (C-programming)

标签 c string time time-t

我需要将当前时间以“HH:MM:SS”格式获取到一个字符数组(字符串)中,这样我以后就可以简单地使用 printf("%s", timeString) 输出结果;

我对 timevaltime_t 类型很困惑,所以任何解释都很棒:)

编辑: 所以我尝试了 strftime 等,它有点管用。这是我的代码:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

但输出是这样的:“13:49:53a??J`aS?”

最后的“a??J`aS?”是怎么回事?

最佳答案

你从这段代码中得到了垃圾:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

因为您不允许在字符串上为空终止符 (\0) 留出空间,所以当它打印字符串时,它不知道结尾在哪里,并将下一位内存中的随机垃圾解释为一部分的字符串。

改成这样:

time_t current_time;
struct tm * time_info;
char timeString[9];  // space for "HH:MM:SS\0"

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);
puts(timeString);

它会正常工作,因为 strftime()将有足够的空间来添加\0。请注意,我使用 sizeof(array) 来避免忘记更改两个地方的数字的风险。

关于c - 时间进入字符串与 HH :MM:SS format (C-programming),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1531055/

相关文章:

c - 如何正确加密文件 AES-CBC?

c - 文件需要正确读入

algorithm - 根据地理坐标计算日照时间

VBA 每天运行一次宏

c - 试图理解 gcc 选项 -fomit-frame-pointer

c++ - 嵌套结构字段的 Clang 格式规则

c - 如何获取 LZMA2 文件 (.xz/liblzma) 的未压缩大小

java - 如何在java中使用mysql命令的条件制作按钮?

asp.net-mvc - 使用 Razor View 引擎 - 如何将十进制值格式化为逗号和两位小数?

Ruby 迭代数小时