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

C语言如何在结构体中内置timestamp,实现带时间戳的结构体数组功能

实现方案

你的需求需要调整结构体定义、新增时间戳赋值逻辑、封装打印函数三个部分完成,具体修改如下:

1. 修正并补充结构体定义

你原代码存在笔误:定义的结构体名为struct St,但声明数组时错写为struct S1,同时需要在结构体中新增时间戳成员,C标准库<time.h>中的time_t类型默认存储秒级Unix时间戳,完全满足常规使用需求:

// 需提前引入对应的头文件
#include <stdio.h>
#include <time.h>
#include <string.h>

struct St {
    char Aps[65];       // 原有存储字符串的成员
    time_t timestamp;   // 新增时间戳成员
};

// 修正结构体名,声明长度为20的结构体数组
struct St Arr[20];

2. 封装结构体元素初始化函数

每次给数组成员赋值时同步写入当前时间戳,避免手动赋值遗漏:

// 初始化St结构体实例的函数
void init_st(struct St *obj, const char *content) {
    // 拷贝字符串内容到Aps成员,做长度限制避免越界
    strncpy(obj->Aps, content, sizeof(obj->Aps) - 1);
    obj->Aps[sizeof(obj->Aps) - 1] = '\0';
    // 获取当前秒级时间戳存入结构体
    time(&obj->timestamp);
}

3. 封装打印函数实现需求

调用该函数打印单个结构体元素时,会同时输出可读时间、原始时间戳、字符串内容:

// 打印单个St结构体内容的函数
void print_st(const struct St *obj) {
    // ctime会直接把time_t转成"Wed Jun 30 21:49:08 1993\n"格式的可读时间
    printf("时间:%s", ctime(&obj->timestamp));
    printf("原始时间戳:%ld\n", (long)obj->timestamp);
    printf("字符串内容:%s\n", obj->Aps);
    printf("---------------------------\n");
}

完整使用示例

#include <unistd.h> // 仅用于示例中的sleep函数,Windows环境可替换为Sleep(1000)

int main() {
    // 给数组前两个元素赋值测试
    init_st(&Arr[0], "第一条测试内容");
    // 模拟间隔1秒的操作
    sleep(1);
    init_st(&Arr[1], "第二条测试内容");
    
    // 打印两个元素
    print_st(&Arr[0]);
    print_st(&Arr[1]);
    
    return 0;
}

可选扩展

如果需要毫秒级/微秒级时间戳,可以把时间戳成员替换为struct timeval类型,使用gettimeofday()函数获取更高精度的时间即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:18:03