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

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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料