爱问知识人 爱问教育 医院库

c语言中char*的初始化问题

首页

c语言中char*的初始化问题

初始化一个字符指针变量,比较两种
第一种:char *a;  a = "Hi, you!";
第二种: char *a; scanf("%s",a); 
我听说是这样: 第一种方法是很普通很正常的赋值方法,而第二种赋值很危险,因为a的值未定,完全由你输入的字符串决定,这就有可能因为输入字符串太长破坏了正常的程序或者数据。
但是, 在第一种方法里,a的赋值是在定义的下一句执行的,换句话说,a赋值时同样可能出现和第二种相同的危险。
但为什么说第一种是安全的呢?

提交回答
好评回答
  • 2008-07-24 00:24:45
    第二种写法根本就是错的(虽然可以编译)。
    问题在于,"Hi, you!"本身是一个字符串常量,跟代码一样是预先分配好内存的,所以第一种情况只是把"H"所在的内存地址复制给变量a而已。他跟char a[] = "Hi, you!";意思基本上是一样的。
    但是第二句仅仅声明了指针,而没有为字符串预分配内存。假设a = 0,那么scanf的时候用户的输入就将写入地址0,导致我们常常看到的“内存0x0不能为写”的错误。
    我们假设你的这个程序实际上不是这个意思,完整的写法是:
    char *a;
    a = (char *)malloc(256);
    if (a)
    {
    	scanf("%s", a);
    	free(a);
    }
    那么用户的输入就不能超过255字节。因为a的内容是分配到堆中的,超过256-1这个上限就会覆盖掉堆的其他内容,导致不可预知的后果。
    

    [***

    2008-07-24 00:24:45

其他答案

    2008-07-19 11:25:06
  • 本人 一点 拙见
    第一种  赋值  面向的是程序员,他应该有一定的电脑基础
    第二种  赋值  可以面向的是程序的用户,用户不一定有很好的电脑基础,所以在 第二种 赋值的时候  是不确定的!

    北***

    2008-07-19 11:25:06

类似问题

换一换
  • 程序设计 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):