C++中为什么str=new char[strlen(s)+1];中要加1

为什么要使用 strlen(s) + 1?

在 C 语言中,字符串是以空字符做为终止标记(结束符)的。所以,C 语言字符串的最后一个字符一定是 \0。请确保所有的字符串都是按照这个约定来存储的,不然程序就会因为莫名其妙的错误退出。strlen 函数返回的是字符串的实际长度(所以不包括结尾的 \0 终止符)。所以为了保证有足够的空间存储所有字符,我们需要在额外 +1。如"abc",占四个字节,strlen的值是3

例子如下:

    //释放实例自身已有内存
    delete[] m_pData;
    m_pData=NULL;

    //在删除自身内存以后在重新new一个长度为len+1的字符数组,类似拷贝构造函数
    int len=strlen(str.m_pData);
    m_pData=new char[len+1];
    strcpy(m_pData,str.m_pData);

注意:char*(即指针变量): 指针变量在32位编译器下占4个字节,在64位编译器下占8个字节。

 

关于 strlen 与 sizeof 的区别:

在子函数中,sizeof 会把从主函数中传进来的字符数组当作是指针来处理。指针的大小又是由机器来决定,而不是人为的来决定的。

#include 
 
void size_of(char str[])
{
    printf("sizeof:%d\n", sizeof(str));
}
 
int main()
{
    char str[20] = "hello";
 
    size_of(str);
 
    return 0;
}

结果显示为sizeof:4     ,表示4个字节

原本str的大小应该是20个字节,因为初始化分配的是20个char,一个char是一个字节。若int arr[20] = {1, 2, 3 ,4},则sizeof(arr)为80,因为定义的是整型类型,一个整数占4个字节。

更多关于 strlen 与 sizeof 的区别参考:https://blog.csdn.net/zhengqijun_/article/details/51815081

在C/C++语言中,double、long、unsigned、int、char类型数据所占字节数:

https://blog.csdn.net/Young__Fan/article/details/89477680

 

 

你可能感兴趣的:(C++)