永发信息网

C程序中,strlen是求取字符串长度,若对整形数组,求取的是什么?还有整形数组作函数参数的问题?

答案:4  悬赏:20  手机版
解决时间 2021-01-24 21:10
#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
全部回答
strlen的功能是计算当前地址开始 直到'\0'出现 之间 的字符个数 所以你用strlen来取整形数组的长度 将会造成不可预知的错误返回值
strlen不能拿来求整型数组长度,而是用来求字符串的,思路不对。至于为什么17,是经过了类型强转之后导致的。 再看看别人怎么说的。
strlen 遇0而止。 因为 a[0] 是 int型的 2, 所以其内存分布是 02 00 00 00。 可见其长度是1. 而用malloc 分配的内存,其初值是随机的,所以此时的 strlen(a) 的值也是随机的。 记得malloc 后要free。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【杂志名称】求文学类杂志栏目名称文学类杂志
为什么用冼洁精加水,就能吹泡泡
电力机车上用的是什么平波电抗器
用正弦定理和余弦定理解三角形在三角形ABC中,
文科生数学高考考哪几本书?地理历史政治都有
吉美家纺居家生活用品地址在哪,我要去那里办
怡宝在什么地方啊,我要过去处理事情
竹笛E调有哪些曲子吹出来效果更好?然后筒音
【一花一叶一世界】一花一叶一世界下一句是什
宪法地位及作用
原创美业地址在什么地方,我要处理点事!
宜家居家具生活馆地址有知道的么?有点事想过
河南省鲁山县第三中学怎么去啊,我要去那办事
【什么风呼啸】把关于“风”的成语补充完整()
一个imo魔法世界的账号,谢谢
推荐资讯
鳄鱼为什么能活那么长啊?奇怪啊,它也不吃蔬菜
我的世界1.7.2的在手机上怎么下 载
同学们进行队列训练,排成一个4层的空心方阵
Theproblemreferredtoatthemeeting,if_______
功能理气解郁,宽中除满的中成药是A.紫雪散B.
什么贷款平台靠谱
停车场(少年路)(少年路与花园南路交叉口北50
地下城与勇士突围长版坡工会怎么进突图
18kw的变频器能带11kw的电机吗
固化的发泡剂如何去除
()糜竺家中是如何着火的?
金竹宾馆(乌兰察布集宁区)地址在什么地方,我
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?