2 u012751989 u012751989 于 2013.11.07 07:45 提问

关于c的一道纠错题 求助!!

#include
#include

struct 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:%s\n", c->number, c->string);

free(c);

return 0;

}
一运行就崩溃
问如何改正

4个回答

snowwindice
snowwindice   2013.11.07 13:34
已采纳

container里面string只是个char型指针,没有分配内存

jinqmao
jinqmao   2013.12.03 15:28

数据结构中的指针都是用来指向别的地方的,通常用来配合使用其他固定的地方,别当做有内存直接拿来使用或者赋值;这里的错误就是直接将数据结构中的指针拿出来输出,导致踩空指针异常。

tlxzsz
tlxzsz   2014.02.18 11:03

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:%s\n", c->number, c->string);
free(c);
return 0;
}

wangyan_HBU
wangyan_HBU   2016.03.17 17:57

把结构体的字符指针改为字符数组,就可以存放数据了,因为你定义的字符指针很可能指向一个未知地址,对未知地址写入可能会出现段错误

Csdn user default icon
上传中...
上传图片
插入图片