注册 登录
编程论坛 C语言论坛

strlen是不是只能计算字符数组的长度,不能算int型数组

卡卡3315 发布于 2020-03-30 22:54, 5825 次点击
程序代码:

#include<stdio.h>
#include<string.h>
int main(int argc,const char *argv[]) {
int a[]  = {10};
int b;
b = strlen(a);
printf("%d",b);
return 0;
}


结果是[Error] cannot convert 'int*' to 'const char*' for argument '1' to 'size_t strlen(const char*)'
10 回复
#2
lin51616782020-03-30 22:58
#3
forever742020-03-30 23:12
虽然牙刷可以用来刷鞋,
但是这个确实不行。
#4
吹水佬2020-03-31 06:50
概念问题
是针对字符串
#5
return_02020-03-31 09:00
那当然
#6
LGD3350600872020-03-31 09:07
是对字符串而言的
#7
tcxk2020-03-31 09:12
那当然
#8
LGD3350600872020-03-31 09:24
数组的数组单元计算用sizeof
int numbers[]={1,2,3,4,5,6,7,8,9};
printf("数组的单元有%d个",sizeof(number)/number(a[0]));
#9
lin51616782020-03-31 09:26
以下是引用LGD335060087在2020-3-31 09:24:04的发言:

数组的数组单元计算用sizeof
int numbers[]={1,2,3,4,5,6,7,8,9};
printf("数组的单元有%d个",sizeof(number)/number(a[0]));

sizeof numbers/sizeof *numbers
才对
#10
叶纤2020-03-31 09:33
或者sizeof(a)/sizeof(type)
#11
自学的数学2020-03-31 09:47
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为止。
1