【发布时间】:2021-02-17 03:06:51
【问题描述】:
如果我在这里运行这个程序。
#include <stdio.h>
#define SIZE 3
struct member
{
char firstname[30];
char lastname[30];
char phone[10];
int age;
};
int main()
{
struct member members[] = {
{
"Martha",
"Flores",
"5576380918",
20
},
{
"Carolina",
"Fuentes",
"5510101010",
21
},
{
"Fernanda",
"Ramos",
"7778189054",
23
}};
for (int i = 0; i < SIZE; i++)
{
printf("%s %s %s %d\n", members[i].firstname, members[i].lastname, members[i].phone, members[i].age);
}
return 0;
}
输出将是预期的+第二个结果的奇怪字符:
Martha Flores 5576380918 20
Carolina Fuentes 5510101010� 21
Fernanda Ramos 7778189054 23
现在,如果我从结构中删除字段 age 并相应地重写程序以获得相同的行为。
#include <stdio.h>
#define SIZE 3
struct member
{
char firstname[30];
char lastname[30];
char phone[10];
// int age;
};
int main()
{
struct member members[] = {
{
"Martha",
"Flores",
"5576380918",
// 20
},
{
"Carolina",
"Fuentes",
"5510101010",
// 21
},
{
"Fernanda",
"Ramos",
"7778189054",
// 23
}};
for (int i = 0; i < SIZE; i++)
{
printf("%s %s %s\n", members[i].firstname, members[i].lastname, members[i].phone);
// printf("%s %s %s %d\n", members[i].firstname, members[i].lastname, members[i].phone, members[i].age);
}
return 0;
}
我得到了这个输出:
Martha Flores 5576380918Carolina
Carolina Fuentes 5510101010Fernanda
Fernanda Ramos 7778189054���
显然我在初始化数组时做错了,我尝试更具体地使用 {.firstname = "", .lastname="", ...} 初始化数组上的元素,但得到了相同的结果。
我正在用 GCC 编译它
【问题讨论】:
-
始终注意“Too Short By One” 问题。最好是 1000 个字符太长,而不是 1 个字符太短......
标签: c