为了账号安全,请及时绑定邮箱和手机立即绑定

请教下是说只能char[]数组类型或char指针类型,可以使用strlen函数求其长度?

请教下是说只能char[]数组类型或char指针类型,可以使用strlen函数求其长度?

忽然笑 2023-03-15 17:13:39
如果是int型,例如:int len[3];len[0] = 1;len[1] = 2;printf("%s\n", strlen(len));打印是0?谢谢!
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

strlen函数所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含"\0")。

基本简介
原型:extern unsigned int strlen(char *s);,在Visual C++ 6.0中,原型为size_t strlen(const char *string);,其中size_t实际上是unsigned int,在VC6.0中可以看到这样的代码:typedef unsigned int size_t;
头文件:string.h
格式:strlen (字符数组名)
功能:计算字符串s的(unsigned int型)长度,不包括'\0'在内
说明:返回s的长度,不包括结束符NULL。
相关函数:
TCHAR.H routine _UNICODE & _MBCS not defined_MBCS defined_UNICODE defined_tcslen
程序举例
举例1:(在Visual C++6.0中运行通过)
#include <string.h>
#include<stdio.h>
int main(void)
{
char *s="Golden Global View";
printf("%s has %d chars",s,strlen(s));
getchar();
return 0;
}


查看完整回答
反对 回复 2023-03-18
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

1.xx[2][8]的内存是连续分配的
2.
01234567
0dAe,BfC.
1CCbbAA\0
本来在第一行最后应该是\0的,但是位置占满了,所以\0就到第二行了(由于内存的连续分配)
但是继续向第二行写数据的时候,C就把第一行的\0覆盖了,到最后再加上第二的\0
而strlen只认起始字符d然后开始数,直到\0为止
所以把dAe,BfC.CCbbAA都数上了,数到第二行的\0结束,所以是14个

查看完整回答
反对 回复 2023-03-18
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信