吃代码的吾 2016-10-02 04:18 采纳率: 0%
浏览 2195
已结题

scanf函数给结构体中指针变量赋值出现段错误

#include
#include

struct book{
char *name;
int num;
};

int main()
{
struct book bk;
bk = (struct book
)malloc(sizeof(struct book));
if(!bk)
{
printf("no space for malloc\n");
return 0;
}
scanf("%s",bk->name); /*此处显示:段错误*/
printf("%s\n",bk->name);
free(bk);
return 0;
}

  • 写回答

5条回答 默认 最新

  • leewers 2016-10-02 04:46
    关注

    其实这是典型的只声明指针而没有分配内存的错误,bk = (struct book)malloc(sizeof(struct book)); 这一句其实为bk申请了内存,用于存放一个char指针和一个int变量,但没有给char指针name分配内存空间,所以name是一个野指针,任何对其指向的内存的操作都有可能导致出错。
    解决方法有两个

    //一个是在结构体定义中将char指针修改为char数字,大小视情况自定
    struct book{
    char name[100];
    int num;
    };
    
    //第二个方法是在main函数中动态申请内存,同样,大小自定。也可以用一个临时的char数组用于输入,输入后根据字符串的长度动态申请内存,并将临时数组内容复制过来,这里就不写了。
    bk.name = new char[100];
    //.....业务代码
    delete[]bk.name; bk.name = NULL; // 使用完毕后释放空间
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序