黑马程序员技术交流社区

标题: 求解C语言 [打印本页]

作者: 流氓划过夜空    时间: 2014-4-14 20:40
标题: 求解C语言
本帖最后由 流氓划过夜空 于 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();
     }
}


我这样写编译没问题啊     为什么运行会出错?   这样定义一个字符串还不浪费内存,不用声明一个超大字符数组。为什么就是不行呢  ?   求解!!!!
作者: 周宇华    时间: 2014-4-14 20:59
这种方法不行。
第一,定义指针没有初始化就使用很危险。因为申请的指针指向是未知的,若刚好指向某些特殊区域(如:系统区等),修改这个指针指向的空间就会造成不可想象的错误。
第二,用这种方法保存字符串更不可取,比如:刚申请的指针除了存放长度为1字节的字符空间外,后面紧跟着保存了其他有效数据,你这样直接修改就把后面的有效数据覆盖了;就算后面没有有效数据,一旦你再重新定义新变量申请空间,指针p所指空间的后面空间有可能被分配给新变量,导致你现在保存的数据被覆盖。
作者: 流氓划过夜空    时间: 2014-4-14 21:39
本帖最后由 流氓划过夜空 于 2014-4-14 21:43 编辑
周宇华 发表于 2014-4-14 20:59
这种方法不行。
第一,定义指针没有初始化就使用很危险。因为申请的指针指向是未知的,若刚好指向某些特殊 ...

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

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


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

语法允许不?

作者: 周宇华    时间: 2014-4-14 21:55
流氓划过夜空 发表于 2014-4-14 21:39
指针不是可以随便指吗?  原来传说中NB的指针也有限制啊!!

如果我改成  char a = ' ';

第一个没问题。后面那个还是不好,因为还是有可能覆盖其他有效数据的。感觉还是定义一个长字符数组靠谱。
作者: 流氓划过夜空    时间: 2014-4-14 21:59
周宇华 发表于 2014-4-14 21:55
第一个没问题。后面那个还是不好,因为还是有可能覆盖其他有效数据的。感觉还是定义一个长字符数组靠谱。 ...

想到了   多线程可能会覆盖   呵呵  !




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2