【发布时间】:2021-04-29 10:17:49
【问题描述】:
我是 C 新手,目前正在研究指针和结构。但似乎我在为我的结构赋值时遇到了问题。
这是我的代码:
#include <stdio.h>
typedef struct
{
char name[30];
int age;
int birth;
}
student;
void record(student *sp);
int main(void)
{
student std1;
record(&std1);
printf("%i, %i %s\n", std1.birth, std1.age, std1.name);
}
void record(student *sp)
{
printf("Name: ");
scanf("%s", sp -> name);
printf("Birth: ");
scanf("%i", &sp -> birth);
printf("Age: ");
scanf("%i", &sp -> age);
}
运行程序:
./struct
Name: David Kohler
result:
Birth: Age: 0, 0 David
我不明白的是,当我将 name 分配给 sp->name 时,它会立即打印出这样的意外结果。不提示输入年龄和出生。
但是当我这样跑的时候,它起作用了:
./struct
Name: Kohler
Birth: 1997
Age: 22
1997, 22 Kohler
那么,你们认为会发生什么?当我输入像 “David Kohler” 这样的全长名称而不是 “Kohler” 时,似乎不太好。
如果我想输入全名,有什么解决办法?我需要使用malloc吗?谢谢。
【问题讨论】:
-
还有
sp -> name->sp->name在->周围放置空格是非常不寻常的。