将日期(声明为字符)打印为字符串
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 值