问题描述
- 关于c的一道纠错题 求助!!
- #include
#includestruct container {
int number;
char *string;
};int main()
{
struct container *c;c = malloc(sizeof(struct container));if (c == NULL) exit(1);scanf(""%d"" &c->number);scanf(""%s"" c->string);printf(""%d:%sn"" c->number c->string);free(c);return 0;
}
一运行就崩溃
问如何改正
解决方案
container里面string只是个char型指针,没有分配内存
解决方案二:
数据结构中的指针都是用来指向别的地方的,通常用来配合使用其他固定的地方,别当做有内存直接拿来使用或者赋值;这里的错误就是直接将数据结构中的指针拿出来输出,导致踩空指针异常。
解决方案三:
struct container {
int number;
char string[20];//字符数组分配内存空间。否则怎样存数据?
};
int main()
{
struct container *c;
c =(container*) malloc(sizeof(struct container));//加一个类型转换
if (c == NULL) exit(1);
scanf(""%d"" &c->number);
scanf(""%s"" c->string);
printf(""%d:%sn"" c->number c->string);
free(c);
return 0;
}
解决方案四:
把结构体的字符指针改为字符数组,就可以存放数据了,因为你定义的字符指针很可能指向一个未知地址,对未知地址写入可能会出现段错误
时间: 2024-11-04 20:42:14