A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NenKeer 中级黑马   /  2014-4-28 22:39  /  1185 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为了避免出现野指针,使用指针都要初始化,但是如果用数组接收输入的字符串,对于字符串的字符数就有限制。
  1.         char string[10];      //接收的字符数都是固定值
  2.         scanf("%s",string);
  3.         //或者
  4.         char string[10];
  5.         gets(string);
  6.       
复制代码
上面的都可以编译运行,但是如果改成指针的话
  1.         char *string;
  2.         scanf("%s",string);
  3.        //或者
  4.         char *string;
  5.         gets(string);
复制代码
编译没有问题,但是运行时候会出错,因为使用了野指针。
有大神指导怎么才能避免这种野指针的情况吗?

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

2 个回复

倒序浏览
首先,造成野指针的原因有以下几种:

一、指针变量没有被初始化。
二、指针p被free或者delete之后,没有置为NULL。
三、指针操作超越了变量的作用范围。

楼主在定义的时候并没有进行初始化。用指针代表字符串的时候,必须要对它进行初始化。

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
傘が咲く 发表于 2014-4-28 23:17
首先,造成野指针的原因有以下几种:

一、指针变量没有被初始化。

我给指针初始化成0或者NULL 编译器会报错
我是用VS2010编译的 是编译器的问题吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马