#include <stdio.h> #include <string.h> void main() { void fun(char *a); int a[2]={2,3}; printf("%d\n",strlen(a)); printf("%d\n",sizeof(a)); fun(a); } void fun(int a[2]) { printf("%d\n",strlen(a)); printf("%d\n",sizeof(a)); printf("%d\n",a[0]); printf("%d\n",a[1]); a=(int*)malloc(2); printf("%d\n",strlen(a)); printf("%d\n",sizeof(a)); } 程序运行结果: 1 8 1 4 2 3 17 4为什么对指针重新开辟空间后,长度会是17?
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程序中,strlen是求取字符串长度,若对整形数组,求取的是什么?还有整形数组作函数参数的问题?
最新推荐文章于 2023-09-18 16:38:44 发布