c++问题 关于char的动态分配内存

2024-12-21 14:10:32
推荐回答(3个)
回答1:

你程序代码逻辑有问题。strlen是求字符串长,字符串必须以'\0'结束,你的字符没有以这个字符结束,因此求得的结果是不确定的。不一定是16。下面,给你一个正确的例子了。
char *a;
a=new char[10];
a[0] ='A';
a[1] ='B';
a[2] ='\0';
int temp=strlen(a); //这时temp的值应该是2。

回答2:

strlen是查看一个字符串的长度, 和数组一点关系都没有, 只跟内存里面连续的内容有关
传递给strlen的是一个内存地址, 从那个地址往后面看, 到第一个值为0的地址的距离, 就是strlen的返回值.
传递给sizeof的一定是个变量,类型或者数组名, 当sizeof的是一个变量或者类型, 则返回该变量和类型的大小, 如果sizeof的是一个数组, 则返回这个数组占据的空间大小
P.S. 对一个指向数组的指针来说, sizeof他并不会返回数组的大小, 只会返回这个指针的大小, 往往是4个bytes. (根据编译和运行环境而定)

回答3:

strlen是在运行时求字符串的大小,以'\0'为结束符的,由于是动态分配的内存,其内存的值是不确定的,所以得出16,也有可能是其他的值,这个是不确定的.
sizeof是在编译时确定大小的.