我需要将当前时间以“HH:MM:SS”格式获取到一个字符数组(字符串)中,这样我以后就可以简单地使用 printf("%s", timeString) 输出结果;
我对 timeval
和 time_t
类型很困惑,所以任何解释都很棒:)
编辑: 所以我尝试了 strftime 等,它有点管用。这是我的代码:
time_t current_time;
struct tm * time_info;
char timeString[8];
time(¤t_time);
time_info = localtime(¤t_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(¤t_time);
time_info = localtime(¤t_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(¤t_time);
time_info = localtime(¤t_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/