strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
而sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。
char aa[10];cout< char aa[10]={'\0'}; cout< char aa[10]="jun"; cout<
sizeof(aa) 返回10 int a[10]; sizeof(a) 返回40
对于指针来说,一定要用strlen来求长度。
char* ss = "0123456789"; sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4 sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位 strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen sizeof返回对象所占用的字节大小. //正确 strlen返回字符个数. //正确
在使用sizeof时,有一个很特别的情况,就是数组名到指针蜕变, char Array[3] = {'0'}; sizeof(Array) == 3; char *p = Array; // Array 是指向Array[0]的地址,p是Array[0]的地址? strlen(p) == 1;//sizeof(p)结果为4 在传递一个数组名到一个函数中时,它会完全退化为一个指针
阅读(1203) | 评论(0) | 转发(0) |