请问关于 operator new 的有关问题
请教关于 operator new 的问题
代码如下:
int a = strlen(url);
this->url = new char[a+1];
memcpy(this->url, url, strlen(url));
经过单步调试发现 this->url多出来一段内存,说明new的时候多了一段,即非a+1 字节..(我这里是现实112,a==96),太夸张了吧
请问如何解释啊
------解决方案--------------------
要用strcpy,而非memcpy
------解决方案--------------------
------解决方案--------------------
strlen算出来的长度没有'\0'结尾的
memcpy不会给你字符串补'\0'
new分配出来的内存,里面的内容是随机的,直到你把他改写掉为止
memcpy(this->url, url, strlen(url) + 1);这样
不过这方法搞字符串会被骂的。应该用strcpy(this->url, url)。如果你碰到是宽字符,很容易不留神就把字符长度和字节长度搞混。结果不是缓冲区溢出就是字符串填的不完整。
代码如下:
int a = strlen(url);
this->url = new char[a+1];
memcpy(this->url, url, strlen(url));
经过单步调试发现 this->url多出来一段内存,说明new的时候多了一段,即非a+1 字节..(我这里是现实112,a==96),太夸张了吧
请问如何解释啊
------解决方案--------------------
要用strcpy,而非memcpy
------解决方案--------------------
//memcpy(this->url, url, strlen(url));
memcpy(this->url, url, a+1);
------解决方案--------------------
strlen算出来的长度没有'\0'结尾的
memcpy不会给你字符串补'\0'
new分配出来的内存,里面的内容是随机的,直到你把他改写掉为止
memcpy(this->url, url, strlen(url) + 1);这样
不过这方法搞字符串会被骂的。应该用strcpy(this->url, url)。如果你碰到是宽字符,很容易不留神就把字符长度和字节长度搞混。结果不是缓冲区溢出就是字符串填的不完整。