sizeof返回的是对象或数据类型占内存的字节数。
strlen(*ptr)求的是字符串的实际长度,它的方法从首地址开始判断直到'\0'结束。
看下面的例子:
char *str = "abcde";
sizeof(str) = 4;//string是一个指针
sizeof(*str) = 1;//*str = 'a'
sizeof(str[2]) = 1;//str[2] = 'c'
strlen(str) = 5;//str共有5个字符
strlen(str+2) = 3;//从'c'到结束有3个字符
strlen(*str)//运行时会出现错误,因为传入的值为'a'的值,可能是操作系统保护的内存,不允许访问
char str[5] = {'a','b','c','d','e'};
sizeof(str) = 10;//当sizeof的操作数为数组时,返回的是数组的长度
sizeof(*str) = 1;//*str = 'a'
sizeof(str[2]) = 1;//str[2] = c
strlen(str) = 未知;
strlen(str+2) = 未知;//因为是strlen是判断到'\0'才返回的,不知道在内存的什么地方会遇到'\0'
strlen(*str))//运行时会出现错误,因为传入的值为'a'的值,可能是操作系统保护的内存,不允许访问
int str[5] = {1,2,3,4,5};
sizeof(str) = 20;//int型占4个字节*5 = 20
sizeof(*str) = 4;//指针4个字节
sizeof(str[2]) = 4;
strlen(str) = 1;//1在内存的存储为0x01 0x00 0x00 0x00,'\0'==0x00,所以判断到0x00时就返回了
strlen(str+2) = 1;//2在内存的存储为0x02 0x00 0x00 0x00,'\0'==0x00,所以判断到0x00时就返回了
strlen(*str)出错))//运行时会出现错误,因为传入的值为1,可能是操作系统保护的内存,不允许访问
阅读(1640) | 评论(0) | 转发(0) |