c语言中char*的初始化问题
初始化一个字符指针变量,比较两种 第一种:char *a; a = "Hi, you!"; 第二种: char *a; scanf("%s",a); 我听说是这样: 第一种方法是很普通很正常的赋值方法,而第二种赋值很危险,因为a的值未定,完全由你输入的字符串决定,这就有可能因为输入字符串太长破坏了正常的程序或者数据。 但是, 在第一种方法里,a的赋值是在定义的下一句执行的,换句话说,a赋值时同样可能出现和第二种相同的危险。 但为什么说第一种是安全的呢?
第二种写法根本就是错的(虽然可以编译)。 问题在于,"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这个上限就会覆盖掉堆的其他内容,导致不可预知的后果。
本人 一点 拙见 第一种 赋值 面向的是程序员,他应该有一定的电脑基础 第二种 赋值 可以面向的是程序的用户,用户不一定有很好的电脑基础,所以在 第二种 赋值的时候 是不确定的!
答:简单地说指针就是指向变量和对象的地址。 指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。还有在很多时候变量,特别是对象的数据...详情>>
答:我建议你去--天下网吧联盟 这里面都是网吧业主和网管交流的论坛,你可以自己注册一个用户进去看看,你可以和他们交流也可以寻求他们的帮助,我想没有你解决不了的问题,...详情>>
答:格式化文本区域的段落标记,用于规定文本和层的属性和位置等。比如: 新浪网 用来规定 新浪网 这三个字居中显示。 文本中心(CENTER)、左(LEFT)或右(R...详情>>