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

已通过scanf获取日期变量,如何以DD-MM-YYYY格式存储到字符串/数组?

解决方案:将日期整数格式化为DD-MM-YYYY字符串

很简单呀!在C语言里,你可以借助格式化字符串函数,轻松把获取到的日、月、年整数转换成DD-MM-YYYY格式的字符串,最常用的就是sprintf()和更安全的snprintf()。

步骤1:准备存储字符串的数组

首先得定义一个足够大的字符数组来放最终的日期字符串。DD-MM-YYYY格式一共需要10个可见字符(比如05-10-2024),再加上字符串结束符\0,所以数组大小至少要设为11:

char date_str[11];

步骤2:使用sprintf格式化(基础版)

sprintf()能把多个变量按照你指定的格式写入字符串。这里我们用%02d保证日和月是两位数字(不足两位时自动补0),%04d保证年份是四位数字:

#include <stdio.h>

// 假设你的日期结构体是这样定义的
typedef struct {
    int dd, mm, yyyy;
} Date;

int main() {
    Date getDate;
    // 你已经通过scanf获取了有效输入
    scanf("%d/%d/%d", &getDate.dd, &getDate.mm, &getDate.yyyy);
    
    char date_str[11];
    // 把整数日期格式化为DD-MM-YYYY字符串
    sprintf(date_str, "%02d-%02d-%04d", getDate.dd, getDate.mm, getDate.yyyy);
    
    // 测试输出结果
    printf("格式化后的日期:%s\n", date_str);
    return 0;
}

步骤3:使用snprintf更安全(推荐版)

sprintf()存在缓冲区溢出的风险——如果格式化后的内容超过数组大小,会导致内存越界问题。snprintf()可以指定最大写入的字符数,完美规避这个风险:

// 把sprintf的代码替换成这一行即可
snprintf(date_str, sizeof(date_str), "%02d-%02d-%04d", getDate.dd, getDate.mm, getDate.yyyy);

sizeof(date_str)会自动获取数组的大小,确保不会写入超出数组范围的内容,安全性拉满。

关键格式符说明

  • %02d:输出两位十进制整数,如果数字小于10,前面自动补0(比如5会变成05)
  • %04d:输出四位十进制整数,确保年份始终以四位格式呈现(比如你输入的24会变成0024,不过一般通过scanf获取的都是完整四位年份,直接输出正常即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:27:32