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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 流氓划过夜空 中级黑马   /  2014-4-14 20:40  /  1028 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 流氓划过夜空 于 2014-4-14 22:00 编辑

#include <stdio.h>

int main()
{
     char *p;
     int position = 0 ;
     *p = getchar();
     while(*(p+position) != '\n')
     {
          position++;
          *(p+position) = getchar();
     }
}


我这样写编译没问题啊     为什么运行会出错?   这样定义一个字符串还不浪费内存,不用声明一个超大字符数组。为什么就是不行呢  ?   求解!!!!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

倒序浏览
这种方法不行。
第一,定义指针没有初始化就使用很危险。因为申请的指针指向是未知的,若刚好指向某些特殊区域(如:系统区等),修改这个指针指向的空间就会造成不可想象的错误。
第二,用这种方法保存字符串更不可取,比如:刚申请的指针除了存放长度为1字节的字符空间外,后面紧跟着保存了其他有效数据,你这样直接修改就把后面的有效数据覆盖了;就算后面没有有效数据,一旦你再重新定义新变量申请空间,指针p所指空间的后面空间有可能被分配给新变量,导致你现在保存的数据被覆盖。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 流氓划过夜空 于 2014-4-14 21:43 编辑
周宇华 发表于 2014-4-14 20:59
这种方法不行。
第一,定义指针没有初始化就使用很危险。因为申请的指针指向是未知的,若刚好指向某些特殊 ...

指针不是可以随便指吗?  原来传说中NB的指针也有限制啊!!

如果我改成  char a = ' ';
                           *p = &a;
第一个问题解决了!


后边   输入完成之后我创建position长的字符数组存连续指针里面的字符       这样应该不会出现丢失字符的现象了吧!

语法允许不?
回复 使用道具 举报
流氓划过夜空 发表于 2014-4-14 21:39
指针不是可以随便指吗?  原来传说中NB的指针也有限制啊!!

如果我改成  char a = ' ';

第一个没问题。后面那个还是不好,因为还是有可能覆盖其他有效数据的。感觉还是定义一个长字符数组靠谱。
回复 使用道具 举报
周宇华 发表于 2014-4-14 21:55
第一个没问题。后面那个还是不好,因为还是有可能覆盖其他有效数据的。感觉还是定义一个长字符数组靠谱。 ...

想到了   多线程可能会覆盖   呵呵  !
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马