m0_56197713
2021-06-29 17:13
采纳率: 100%
浏览 42

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;
}

思路如上,修改年龄等数字就没有问题,但是修改名字,院系等就会出现越界情况,应该如何处理?

 

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 浪客 2021-06-29 21:56
    已采纳
    //假定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; //指向下一个学生的指针
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 浪客 2021-06-29 17:15

    int num; //学号

    char *name; //姓名 只是个指针,并没有分配内存,改成name[20] 下同

    char *sex; //性别

    int age; //年龄

    char* college; //院系

    struct Student1* next; //指向下一个学生的指针

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题