c - 如何将时间存储在数组中

标签 c arrays

我对c还是个新手。我正在尝试将时间和日期记录到一个数组中

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>

int main(void) {
char prompt, start = 0;
char arr[20];
struct tm *sTm;
time_t now = time(0);
sTm = gmtime(&now);

strftime(arr, sizeof(arr), "%Y-%m-%d %H:%M:%S", sTm);
printf("%s %s\n", arr, "Event occurred now");
printf("Time is %d:%d:%d Date is %d-%d-%d \n", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);
printf("Press and key to exit \n\r");
scanf("\n%c", &prompt);

return 0;
}

简而言之,我想要这一行的值

printf("Time is %d:%d:%d Date is %d-%d-%d \n", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);

在数组中,例如 Timeanddate[1] = 14:53:04,20/3/2016

最佳答案

保存单个日期时间字符串不同于将多个日期时间保存到日期时间数组中。

如果要保存一个日期时间,则定义一个字符缓冲区以容纳字符串中的足够字符以及 NUL 字符。在您使用 HH:MM:SS,dd/mm/yyyy 的情况下,您需要 19 个字符加上 NUL 字符。

char Timeanddate[20];

如果您要保存日期时间数组,那么您需要决定是否需要未知数量的数组元素,因此需要增加数组的大小,或者是否可以假设数组条目的数量有限。如果数组在定义后必须增长,那么在 C 中就很难了。

对于多个日期时间,您将需要一个二维字符数组。假设您知道条目的数量(比如 5 个不同的日期/时间),然后定义一个 5 个字符串的数组,每个字符串 20 个字节。

char Timeanddate[5][20];

然后您必须将日期时间的值写入您选择的字符缓冲区。您应该使用 snprint() 而不是 sprintf(),因为 snprintf() 可以防止意外地将太多字节写入数组元素,从而防止缓冲区溢出并在您运行应用程序时导致不良结果。

对于单个日期时间字符串

snprintf(Timeanddate, sizeof(Timeanddate), "%d:%d:%d,%d/%d/%d", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);

对于日期时间字符串数组

snprintf(Timeanddate[0], sizeof(Timeanddate[0]), "%d:%d:%d,%d/%d/%d", sTm->tm_hour, sTm->tm_min, sTm->tm_sec, sTm->tm_mday, sTm->tm_mon+1,sTm->tm_year+1900);

关于c - 如何将时间存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115340/

相关文章:

c - C 中的命名管道示例

c - 为什么 int 指针的大小与 int 数组的大小不同?

c - 使用 fscanf 从文件读取并保存到 struct c 语言的数组中

C语法。复制字符串

c - 在无法到达的路径上具有未定义行为的程序的行为是否已定义?

C++ 不需要返回值

c++ - 字符串矩阵的 sizeof

javascript - 如何对对象数组中的某些值进行舍入?

arrays - 如何在azure逻辑应用程序中将字符串转换为数组

python - 获取 numpy.ndarray 中每个元素的日志?