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

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; //指向下一个学生的指针
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 (有偿)懂数值分析和含时变参数微分方程的来
  • ¥15 layui父页的数据表格如何用弹窗页提交后的查询数据来更新数据表格内容?
  • ¥15 abaqus随机生成二维颗粒
  • ¥15 安装ansys许可证管理器时出现了这个问题,如何解决?
  • ¥100 高价求算法,利用智能手机传感器计算车辆的三轴g值
  • ¥15 Blazor server 数据库操作异常,如何解决?(语言-c#)
  • ¥15 uni-app开发APP运行到浏览器访问接口跨域
  • ¥100 mfc消息自创建控件
  • ¥15 网页视频跳过后学习进度未增加
  • ¥15 研究生初试录取系统设计的c++