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

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条)

报告相同问题?

悬赏问题

  • ¥20 求会6sv辐射传输模型,辅导(可py6s🙏🏻有偿
  • ¥15 .xla后缀的文件拖到excel里什么内容也没有怎么办
  • ¥20 Workbench中Mechanical打不开、闪退是什么原因?
  • ¥240 MapReduce应用实践 学生课程
  • ¥15 hlss视频显示AUTHORITY_INVALID
  • ¥15 MAX9296A+MAX96717,美信gmsl解串有人做过吗?
  • ¥15 求帮我解决一下inode 爆满的问题(有偿)
  • ¥15 关于#vscode#的问题:布料滤波算法中C++实现pcl在Vscode中pcl库没有#include <pcl>
  • ¥15 fpga:ov5640采集tft显示
  • ¥100 python怎么连接wxSQLite3加密的数据库