
strlen函数求字符串长度
的原理是:从起始地址开始按字节读取,读取到'\0'(就是0)停止,
int a[2]={2,3}; a的两个元素占8个字节:0x02 0x00 0x00 0x00 0x03 0x00 0x00 0x00
那么strlen(a)从0x02读起,到0x00就停止,于是返回长度1,如果你把a[0]赋值为257,那就会返回2,a[0]赋值为65793,那就会返回3, a[0]赋值为16843009,就会返回5
数组当作函数参数,那就只是一个指针了,对于32位系统那长度就是4
a=(int)malloc(2);
printf("%d\n",strlen(a)); 这个结果是不定的,a的值是随机的,a后面的地址内的值也是随机的,而strlen会从a开始一直往后读,直到读到0为止,你的例子里是读到a后面第18个字节为0,于是返回17
在C语言中习惯上在
使用时都把它定义成一个宏,比如#define
GET_ARRAY_LEN(array,len) {len = (sizeof(array) /
sizeof(array[0]));}。
而在C++中则可以使用模板技术定义一个函数,比如:template <classTintgetArrayLen(T& array){return(sizeof(array) / sizeof(array[0]));}这样对于一些简单的
数组可以使用这个宏或者这个函数来获取数组的长度了。
以下是两个Demo程序,一个C语言的,一个C++的:PS:若数组为存储字符串的字符数组,即以双引号括起来的字符串整体初始化的字符数组
例如:char a[]="abcdefg"或者char
a[]={"abcdefg"}
则所求得的长度为字符数组的长度,而不是对应的字符串的长度,要求字符串的长度还需要减一
原因为存储字符串的字符数组末尾有一个'\0'字符,需要去掉它。
# include <stdioh>
#include<stringh>
int main()
{
char a[10]={4,2,3,4,5,6},x;
/将数组定义成字符型,就可以用字符函数了;int与char在大多数情况下是等价的;/
x=strlen(a);//用字符串长度计算函数;
printf("%d\n",x);
for(int i=0;i<5;i++)
/定义成char型依然可以以(int)型输出;ASCII码将int与char连接起来,成为水乳交融的同胞兄弟;/
printf("%d ",a[i]);
/整型可以用char定义,字符型也可以用int定义;在需要时可以交叉使用;譬如此代码;/
return 0;
}


评论列表(0条)