因为strlen是计算字符串有多少字符的,不包括结束符”\0“,所以加一。如"abc",占四个字节,strlen的值是3 //释放实例自身已有内存delete[] m_pData; m_pData=NULL; //在删除自身内存以后在重新new一个长度为len+1的字符数组,类似拷贝构造函数intlen=strlen(str.m_pData); m_pData=newchar[len+1]; strc...
C语言数组下标是从0开始的,而strlen返回的是字符的个数,当你输入1个字符的时候,strlen返回的是1,而t[1]是'\0',你总不想在排序后,总把'\0'放在第一个吧,减1后指向最后一个字符会避免这种情况
我们知道,很多情况下判断一个字符串长度需要知道其在哪里结束,这就是结束符'\0',所以你需要加一,strlen("string")返回6,事实上这个字符串占7个字节,如果你 name=new char[6];strcpy(name,"string");它会复制7个字节,而你只分配了6个字节给name,所以他就把最后的一个字节放在紧跟着的内存...
}为什么在后面加1?不加1的时候运行时,输入两行就出错了,加1就不会出现这种情况了。为什么呢? 展开1个回答 hhx237772 2016.09.06 满意答案 加1是用来存储 '\0' 的,strlen(buffer)只会计算字符个数,不会包含'\0';strcpy(pS[i],buffer);时,pS[i]申请的内存不够,会越界。 00分享举报您可能感兴趣的内容...
加1是用来存储 '\0' 的,strlen(buffer)只会计算字符个数,不会包含'\0';strcpy(pS[i],buffer);时,pS[i]申请的内存不够,会越界。
因为字符数组的下标是从0开始的,所以最大下标就是strlen(s)-1
没有看到完整代码,根据strlen可以知道这块是用strlen或mb_strlen计算的字符串长度,如果,为什么减1,如果我推论没错这段代码应该是 mt_rand(0,strlen-1);举个例子,从一个字符串随机取出一段一定长度的随机字符串,验证码就是样的。randStr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO...