将日期(声明为字符)打印为字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将日期(声明为字符)打印为字符串相关的知识,希望对你有一定的参考价值。

我有这个代码,我需要打印出值而不改变字符大小。

#include <stdio.h>
#include <string.h>
typedef struct studentData
{
int ID;
char lastName[10];
char firstName[10];
char birthMonth[2];
char birthDay[2];
char birthYear[4];
}
studentData;

int main()
{
 studentData admin={12345,"John","Doe","07","12","1990"};


printf("ID: %d
",admin.ID);
printf("Last Name: %s
",admin.lastName);
printf("First Name: %s
",admin.firstName);
printf("Birth Month: %s
",admin.birthMonth);
printf("Birth Day: %s
",admin.birthDay);
printf("Birth Year: %s
",admin.birthYear);

return 0;
}

我的结果

ID: 12345
Last Name: John
First Name: Doe
Birth Month: 07121990
Birth Day: 121990
Birth Year: 1990

我想要的是

ID: 12345
Last Name: John
First Name: Doe
Birth Month: 07
Birth Day: 12
Birth Year: 1990

我希望将Date保存为2个字节,将月份保存为2个字节,因此 0将不起作用

答案

使用"%s"的精度说明符不能打印超过数组大小。这样,admin.birthMonth不需要为空字符终止。然而,如果代码后来使用字符串,使用wider array是明智的,只有一点点内存昂贵。

s转换写入的最大字节数。 C11dr§7.21.6.14

printf("Birth Month: %.2s
",admin.birthMonth);
// or
printf("Birth Month: %.*s
", (int) (sizeof admin.birthMonth), admin.birthMonth);
另一答案

赋值操作无法在出生月份,出生日和出生年份中放置一个NULL字符,因为您要分配的大小(即“07”,“12”或“1990”)与数组的大小相同(即诞生日,出生月,出生年份。使其相应的数组大小至少为1byte,以使它们能够包含以NULL结尾的字符串。

typedef struct studentData
{
    int ID;
    char lastName[10];
    char firstName[10];
    char birthMonth[3];
    char birthDay[3];
    char birthYear[5];
}
studentData;

由于大小与您要分配的大小完全相同,因此无法在最后输入NULL,从而导致打印垃圾字符。

要么

您可以使用Precision Specifier进行打印,即通过指定要打印的字符数,如下所示

printf("Birth Month: %.2s
", admin.birthMonth);
printf("Birth Day: %.2s
", admin.birthDay);
printf("Birth Year: %.4s
", admin.birthYear);

查看this以了解有关宽度和精度说明符的更多信息。

另一答案


typedef struct studentData
{

    int ID;
    char lastName[10];
    char firstName[10];
    char birthMonth[3];
    char birthDay[3];
    char birthYear[5];

}

studentData;

int main()
{

    studentData admin={12345,"John","Doe","07","12","1990"};
    printf("ID: %d
",admin.ID);
    printf("Last Name: %s
",admin.lastName);
    printf("First Name: %s
",admin.firstName);
    printf("Birth Month: %s
",admin.birthMonth);
    printf("Birth Day: %s
",admin.birthDay);
    printf("Birth Year: %s
",admin.birthYear);
    return 0;

}

出生月份,出生日期和出生年份的大小应为3,3和5,以便最后一个空格占据空字符。在您的代码中,大小等于no。你想要的角色。谢谢

以上是关于将日期(声明为字符)打印为字符串的主要内容,如果未能解决你的问题,请参考以下文章

DateTimeHelper日期类型与字符串互转以及日期对比相关操作

使用 vb.net 将字符串时间/日期值转换为 dateTime 值

怎么将string类型的日期转换为date

如何打印与从 txt 文件中读取的存储 int 关联的字符串?

如何将字符型数据转化成日期格式

是否有 perl 5.005 核心模块可以将纪元秒数转换为日期时间字符串?