c语言 字符串长度

来源:百度知道 编辑:UC知道 时间:2024/09/24 01:15:35
很初级的一个问题。。。程序如下:
char* m=new char[TOKEN_LENGTH];//这里token_lenghth是一个预先define的数,我的例子中是7
printf("m length %d\n",strlen(m));//但是这里变成了24,为什么??

另外,如果在中间加上一句memset(m,0,TOKEN_LENGTH);
strlen(m)又变成了0。。。这又是为什么??
现在我想创建一个新字符指针,长度为token_lenghth,不多不少,正好这么多,怎么办?

strlen()函数判断的字符串长度是以\0为结尾作为标志的。
当你char * m=new char[TOKEN_LENGTH]后,虽然为指针分配了地址,但是其指向的内容未被初始化,所以m指向的内容是未知的,可能在第24个字符的位置发现了\0所以strlen()显示长度为24。
而memset()执行后所有的m指向的区域都被填写为\0,所以strlen()直接在第0个位置发现了\0,你的字符串长度当然就是0了。
其实只要你在堆里创建了长度一定得内存区域,就相信编译器,他已经创建好了,放心使用就行。但是创建后一定要初始化不然直接Strlen就会出现你的问题。