c语言修改char*型指针指向的中文字符串显示越界
问题描述:
比如定义了一个结构体变量为学生,里面的性别,名字等是char*型指针指向中文
struct Student1
{
int num; //学号
char *name; //姓名
char *sex; //性别
int age; //年龄
char* college; //院系
struct Student1* next; //指向下一个学生的指针
};
//假定head_1已经跳转到想要更改的学生地址
void change()
{
char* name,*college,*sex;
int age, grade;
printf("请输入更改后学生的姓名为:");
scanf("%s",&name);
head_1->name = name;
printf("请输入更改后学生的性别为:");
scanf("%s", &sex);
head_1->sex = sex;
printf("请输入更改后学生的年龄为:");
scanf("%d",&age);
head_1->age = age;
printf("请输入更改后学生的院系为:");
scanf("%s", &college);
head_1->college = college;
}
思路如上,修改年龄等数字就没有问题,但是修改名字,院系等就会出现越界情况,应该如何处理?
答
//假定head_1已经跳转到想要更改的学生地址
void change()
{
//char* name,*college,*sex; //是局部变量,函数结束后这些变量的内容会被改变,下同
//int age, grade;
//如果修改前的head_1->name等元素是malloc分配的,在这里最好先free一下。下面的性别,院系也一样。
//free(head_1->name)
printf("请输入更改后学生的姓名为:");
head_1->name = (char*)malloc(20*sizeof(char));
scanf("%s",head_1->name); // scanf("%s",&name); name已经是指针,不需要加&,下同
//head_1->name = name;
printf("请输入更改后学生的性别为:");
head_1->sex =(char*)malloc(3*sizeof(char));
scanf("%s",head_1->sex); //scanf("%s", &sex);
printf("请输入更改后学生的年龄为:");
scanf("%d",&head_1->age); //scanf("%d",&age);
//head_1->age = age;
printf("请输入更改后学生的院系为:");
head_1->college = (char*)malloc(20*sizeof(char));
scanf("%s", head_1->college); //scanf("%s", &college);
//head_1->college = college;
}
上面是使用指针实现的,如果对指针,malloc有困难,建议还是使用字符数组比较好一些
int num; //学号
char name[10]; //姓名 只是个指针,并没有分配内存,改成name[20] 下同
char sex[3]; //性别
int age; //年龄
char college[50]; //院系
struct Student1* next; //指向下一个学生的指针
答
int num; //学号
char *name; //姓名 只是个指针,并没有分配内存,改成name[20] 下同
char *sex; //性别
int age; //年龄
char* college; //院系
struct Student1* next; //指向下一个学生的指针