我有这个代码,我需要打印出值而不改变字符大小。
#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在这里工作
答案 0 :(得分: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);
答案 1 :(得分:0)
赋值操作无法在出生月份,出生日和出生年份中放置一个NULL字符,因为您要分配的大小(即“07”,“12”或“1990”)与大小相同阵列(即birthDay,birthMonth,birthYear)。使其相应的数组大小至少为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以了解有关宽度和宽度的更多信息精确说明。
答案 2 :(得分: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。想要的角色。 谢谢