永发信息网

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

答案:4  悬赏:20  手机版
解决时间 2021-01-24 21:10
  • 提问者网友:难遇难求
  • 2021-01-24 00:27
#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?
最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-01-24 00:57
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
全部回答
  • 1楼网友:玩世
  • 2021-01-24 03:53
strlen的功能是计算当前地址开始 直到'\0'出现 之间 的字符个数 所以你用strlen来取整形数组的长度 将会造成不可预知的错误返回值
  • 2楼网友:北城痞子
  • 2021-01-24 02:42
strlen不能拿来求整型数组长度,而是用来求字符串的,思路不对。至于为什么17,是经过了类型强转之后导致的。 再看看别人怎么说的。
  • 3楼网友:蓝房子
  • 2021-01-24 01:15
strlen 遇0而止。 因为 a[0] 是 int型的 2, 所以其内存分布是 02 00 00 00。 可见其长度是1. 而用malloc 分配的内存,其初值是随机的,所以此时的 strlen(a) 的值也是随机的。 记得malloc 后要free。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯