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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java基础——练习题纠错一
第一题: public class Pvf{     static boolean Paddy;         public static void main(String argv[]){             System.out.println(Paddy);         } } 编译运行以上代码会出现什么情
2道通杀的iOS/Android笔试题
指针 泛型 反射
iOS基础笔试题 - 集锦二
前言 以下部分题目来源于网络,笔者在此处收集起来,既是要巩固自我,也希望能够帮助到同样需要的人!参考答案均为笔者所写,其有疑问或者出错之处,请在评论中提出,谢谢!不喜勿喷! 1、即时聊天App不会采用的网络传输方式 A. UDP B. TCP  C. HTTP  D. FTP FTP:是文件传输协议,是File Transfer Protocol的简称,它的作用是用于
C++面试题之找出下面的所有错误
请找出下面代码中的所有错误。说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”。#include "string.h" int main() { char *src = "hello,world"; char *dest = NULL; int len = strlen(src); dest = (char *)malloc(len); char
iOS 面试题~经验找代码错误
//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄 一、概念 1.指出以下这段代码的问题  - (void)test{          CGRect frame = CGRectMake(20, 200, 200, 20);     self.alert = [[UILabel alloc]initWithFr
黑马Java测试题错题归纳
黑马Java测试题错题归纳 下面哪些赋值语句是正确的( ) A. long test = 012; B. float f = -412; C. int other = (int) true; D. double d = 0x12345678; E. byte b = 128; 尝试运行下面的代码会发生什么?( ) public class Test { public static voi
C++ 笔试题纠错
网易2018实习生笔试题:    1.printf以及cout都是从右向左编译,从左向右输出            2.初始化列表的的执行顺序是变量的声明顺序    3.欲实现出virtual函数,对象必须携带某些信息,主要用来在运行期决定哪一个virtual函数被调用,这份信息通常由所谓的一个vptr(virtual table pointer)指出,vptr指向一个由函数指针构成的数组vbtl...
一道IOS面试题
近一年内陆续面试了不少人了,从面试者到面试官的转变让我对 iOS 招聘有了更多的感受。经过了前段时间的一大波面试,我们终于找到了志同道合的小伙伴,面试也暂时告一段落了。总结下面试人过程中的感受,你也可以读到我们对简历、算法、性格、iOS 基础、底层知识的看法和一些常问的面试题。 一个靠谱的简历 简历非常能反映一个人的性格和水平,相比于你在学校获得多少奖项,工作经历、项目经历、熟悉的技术
(面试)C语言指针程序改错题
改错题 第一道:
C++继承改错题
/* * 程序的版权和版本声明部分 * Copyright (c)2014, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称:a.cpp * 作 者:孔云 * 完成日期:2014年6月10日 * 版 本 号: v1.0 * 输入描述:用于初始化对象的5个整数1 2 3 4 5 。 * 问题描述:下面的程序中,存在着两处语法错误。请改正错误,使程序按下面输入输