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

问题描述 投票:-2回答:3

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

#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\n",admin.ID);
printf("Last Name: %s\n",admin.lastName);
printf("First Name: %s\n",admin.firstName);
printf("Birth Month: %s\n",admin.birthMonth);
printf("Birth Day: %s\n",admin.birthDay);
printf("Birth Year: %s\n",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将不起作用

c string struct char
3个回答
1
投票

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

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

printf("Birth Month: %.2s\n",admin.birthMonth);
// or
printf("Birth Month: %.*s\n", (int) (sizeof admin.birthMonth), admin.birthMonth);

0
投票

赋值操作无法在出生月份,出生日和出生年份中放置一个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\n", admin.birthMonth);
printf("Birth Day: %.2s\n", admin.birthDay);
printf("Birth Year: %.4s\n", admin.birthYear);

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


0
投票


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\n",admin.ID);
    printf("Last Name: %s\n",admin.lastName);
    printf("First Name: %s\n",admin.firstName);
    printf("Birth Month: %s\n",admin.birthMonth);
    printf("Birth Day: %s\n",admin.birthDay);
    printf("Birth Year: %s\n",admin.birthYear);
    return 0;

}

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

© www.soinside.com 2019 - 2024. All rights reserved.