【发布时间】:2019-01-03 20:12:59
【问题描述】:
我想编写函数来获取和打印用户输入的数据。想法是将名称和姓氏作为指针,指向可变大小字符串的指针。代码有什么问题?我究竟做错了什么?替代品?
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char *name;
char *lastname;
int marks[5];
} Student;
void setS(Student *s);
void getS(Student *s);
int main()
{
Student st;
getS(&st);
setS(&st);
return 0;
}
void setS(Student *s){
int i;
printf("Name: %s\t", s->name);
printf("last Name: %s\t", s->lastname);
for(i=0; i<5; i++)
printf("%3d", s->marks[i]);
printf("\n");
}
void getS(Student *s){
int i;
printf("Enter name\n");
gets(s->name);
printf("Enter last name\n");
gets(s->lastname);
printf("Enter marks\n");
for(i=0; i<5; i++)
scanf("%d", &s->marks[i]);
printf("\n");
}
【问题讨论】:
-
你永远不会初始化任何一个指向有效、足够内存的指针。您的
gets调用调用了未定义的行为 -
太棒了,我应该...!?
-
要么分配足够的内存并将用户输入限制为不超过你所拥有的,要么在stackoverflow.com/questions/16870485/…中执行类似的操作
-
我明白,我想。使用 malloc 分配内存,添加从输入中收集字符和删除不需要的字符的功能......所有这些都必须在一个......