BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #9077同步于 2008/7/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

问一个指针的问题~~

perfectfan
2008/7/2镜像同步8 回复
在vs2005里面 char *p=new char; char *n="abcd"; strcpy(p,n); 为什么这样打印p可以正确打印出abcd呢? new char应该是只分配了一个char的空间,他怎么能接收abcd啊? 另外问一个问题 new char(10)和new char[10]有什么区别吗? 在删除new char(10)的空间是delete []还是delete? [em21]
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
purevirtual机器人#1 · 2008/7/2
第一个问题, strcpy它得原理,在林锐得 高质量c编程指南里有: char *strcpy(char *des, const char* src); 首先check des是否为null; 然后 *des++ = *src++; 所以p不是空的,通过了check,然后 *p++ = *n++: 【 在 perfectfan (nicky) 的大作中提到: 】 : 在vs2005里面 : char *p=new char; : char *n="abcd"; : ...................
purevirtual机器人#2 · 2008/7/2
new char(10)就是 一个char字符 ansi码是10 new char[10]就是分配10个sizeof(char)得空间,也就是分配一个元素个数为10得字符数组 所以new char(10) 释放得时候 应该是delete ; 【 在 perfectfan (nicky) 的大作中提到: 】 : 在vs2005里面 : char *p=new char; : char *n="abcd"; : ...................
rebirthatsix机器人#3 · 2008/7/2
能正常显示不代表你这么做是对的,堆溢出老。。
perfectfan机器人#4 · 2008/7/2
对啊,就是des++了,但是new char只是给在内存中找到了一个能存放一个char的空间 如果进行++然后赋值的话,难道不会引起错误? 另外如果是char *p=new char[2]; 那么用strcpy就会出错。看那个strcpy,他并不知道这段空间的大小,超过了2个char,他还是可以继续赋值~ 另外LS的,为什么new char可以,new char[n] n小于src的长度,这样就会有错? ~~~莫名其妙 【 在 purevirtual 的大作中提到: 】 : 第一个问题, : strcpy它得原理,在林锐得 高质量c编程指南里有: : char *strcpy(char *des, const char* src); : ...................
purevirtual机器人#5 · 2008/7/2
这我就不知道了,个人猜想是: strcpy里是根据*des是否为 \0 来判断是否到达 字符串des末尾; 【 在 perfectfan (nicky) 的大作中提到: 】 : 对啊,就是des++了,但是new char只是给在内存中找到了一个能存放一个char的空间 : 如果进行++然后赋值的话,难道不会引起错误? : 另外如果是char *p=new char[2]; : ...................
perfectfan机器人#6 · 2008/7/2
des是不是到了\0是跟src相关的~ 跟des的空间并没有关系~ 用strcpy是不是就会因此会有很不安全的因素,就是可能赋值成功了,但是程序是有问题的? 【 在 purevirtual 的大作中提到: 】 : 这我就不知道了,个人猜想是: : strcpy里是根据*des是否为 \0 来判断是否到达 字符串des末尾;
rebirthatsix机器人#7 · 2008/7/2
【 在 perfectfan 的大作中提到: 】 : des是不是到了\0是跟src相关的~ : 跟des的空间并没有关系~ : 用strcpy是不是就会因此会有很不安全的因素,就是可能赋值成功了,但是程序是有问题的? strcpy是不会判断目的地址是否足够长的 无论目标地址是在堆还是在栈上,都能直接赋过去,它本身根本不会判断是不是写越界了,所以才会有缓冲区溢出
purevirtual机器人#8 · 2008/7/2
这个,不是strcpy得不安全,是指针。。。 【 在 perfectfan (nicky) 的大作中提到: 】 : des是不是到了\0是跟src相关的~ : 跟des的空间并没有关系~ : 用strcpy是不是就会因此会有很不安全的因素,就是可能赋值成功了,但是程序是有问题的? : ...................