strlen函数

是说只能char[]数组类型或char指针类型,可以使用strlen函数求其长度?如果是int型,例如:intlen[3];len[0]=1;len[1]=2;print... 是说只能char[]数组类型或char指针类型,可以使用strlen函数求其长度?
如果是int型,例如:
int len[3];
len[0] = 1;
len[1] = 2;
printf("%s\n", strlen(len));
打印是0?
谢谢!
展开
 我来答
汤灵杉eX
推荐于2017-09-09 · TA获得超过2194个赞
知道小有建树答主
回答量:352
采纳率:50%
帮助的人:252万
展开全部
strlen函数的原理你都搞错了,其原型应该是这样的:int strlen(char *);它接受的是一个char*类型的参数,真不晓得你的这个是怎么传递进去的。 strlen计算字符串的长度例如"abc"的长度是3.但是实际上如果将其放到字符数组中的话,应该占4个元素。因为字符串是以字符'\0'结尾的,但是这个'\0'在我们的字符串是隐藏的,我们看不到。实际上是有的.例如:

char a[4]="abc";//这里数组的元素个数至少应该是4,否则此字符串不叫字符串了,只能叫字符数组了。

strlen判断一个字符串的结束就是以其末尾的'\0'为界限。其实现代码可以模拟为以下:
int strlen(char *p)
{
int i=0;
while(*p++)i++;
return i;
}

所以他是不包括'\0'这个字符的。
生活达人小丽

推荐于2017-10-09 · 用心创作内容,感谢您的关注。
生活达人小丽
采纳数:5761 获赞数:37759

向TA提问 私信TA
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者jotu6GViRW
2019-06-15 · TA获得超过3.5万个赞
知道大有可为答主
回答量:1.5万
采纳率:26%
帮助的人:683万
展开全部
首先要声明,strlen(xx[i])反回的值是0,因为你的xx还没有初值。你应该在readDat()的while循环中测试一下,是否读入了数据到xx数组中,在while中使用printf输出xx数组就知道了。应该是strlen反回0导至的错误。因为不了解你的那个dat文件中9近是什么内容,因此不好判断
程序主要错在第一个for语句for(j=1;j<(strlen(xx[i])-2);j=j+2)中的(strlen(xx[i])-2)这一句。
因为strlen()函数的反回类型为unsigned
int(无符号整型),因此再进行strlen(xx[i]-2的时候得到的是一个负数-2,而unsigned
int是无法表示负数的,因此就被计算机转换为补码的形式来表示-2了,,也就是十进制数的4294967292,二进制形式是11111111110(具体多少个1自已算,反正前面全是1)
你可以把strlen(xx[i])强制转换为int型来测试,比如(int)strlen(xx[i]-2这样的话就能得到正确结果了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
创作者9qYEZy8sfR
2019-08-20 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.3万
采纳率:27%
帮助的人:828万
展开全部
1.xx[2][8]的内存是连续分配的
2.
01234567
0dAe,BfC.
1CCbbAA\0
本来在第一行最后应该是\0的,但是位置占满了,所以\0就到第二行了(由于内存的连续分配)
但是继续向第二行写数据的时候,C就把第一行的\0覆盖了,到最后再加上第二的\0
而strlen只认起始字符d然后开始数,直到\0为止
所以把dAe,BfC.CCbbAA都数上了,数到第二行的\0结束,所以是14个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鬼龙子
2009-11-28 · TA获得超过203个赞
知道小有建树答主
回答量:264
采纳率:0%
帮助的人:130万
展开全部
int是占两字节,因为是数组,分配的是3个int所以应该是6字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式