是一个标准库函数。功能:计算字符串s的长度,但是不包括'\0'在内。
strlen头文件_strchr头文件
当头文件包含了
#include
该函数就能使用了。
例如 char *s="hello";
int i=strlen (s);
printf("%d\n",i);输出的为5 因为字符串"hello"一共有五个字符。
是一个库函数。定义在
strlen是函数
strlen()函数的作用是统计给定字符串的长度。
标准函数 求字符串长度
strlen(s):通常用来计算字符串s的长度
如:
char s[256];
memset(s,'\0',sizeof(s));
strcpy(s,"12345678");
那么strlen(s)的结果为:8
strlen是C语言标准库提供的一个函数,给你提供strlen的一个版本,你就明白其中的s是什么意思了。
size_t strlen(const char *s)
{const char *sc;
for(sc = s; *sc != '\0';++sc)
;return (sc-s);
}
那s[]一定是个char的数组。具体来说,s是一个数组的首地址。
strlen(char*)的形参只能是指针。
数组长度
s真正占用的内存打下,不是数组
strlen()
为计算字符串长度
s 是字符串
用strlen()时,头文件要用什么?
头文件要用#include
strlen()只是统计字符串的长度,统计到'\0'结束,但不包括'\0',这个与sizeof()不一样。
对于用双引号引起来的字符串,系统默认最后一位字符为'\0',如你自己定义的:
chara[]="china";
charb[]={"china"};
另外,数组初始化还可以是一个字符一个字符赋值,如:
charc[]={'c','h','i','n','a'};
chard[]={'c','h','i','n','a','\0'};
但系统不会自动给你在最末位添加'\0’。
扩展资料:
头文件的作用:
1、头文件可以定义所用的函数列表,方便查阅你可以调用的函数。
2、头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。
3、头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
strlen(char *)
作用:检测字符串实际长度。
如:char s[]="1234567";
int a=strlen(s);//a=7
实际上strlen(char *)检测的是'\0',strlen(char *)碰到'\0'就返回'\0'以前的字符数。
char f[]="123456\01111";
int b=strlen(f);//b=6,因为遇到了'\0'
int c=strlen(h);//c=2,因为遇到了'\0'(注意'0'不等于'\0',而0等于'\0')
扩展资料:
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
区别sizeof:
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
⒈sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
⒉sizeof是取字节运算符(关键字),strlen是函数。
⒊sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'\0'结尾的。
⒋数组做sizeof的参数不退化,传递给strlen就退化为指针了。
⒌大部分编译程序 在编译的时候就把sizeof计算过了是类型或是变量的长度。这就是sizeof(x)可以用来定义数组维数的原因
6.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。
7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
⒏当适用了于一个结构类型时或变量, sizeof 返回实际的大小,
当适用一静态地空间数组, sizeof 归还全部数组的尺寸。
sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸
⒐数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小, 需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
参考资料:
strlen(char *)
作用:检测字符串实际长度。
如:char s[]="1234567";
int a=strlen(s);//a=7
实际上strlen(char *)检测的是'\0',strlen(char *)碰到'\0'就返回'\0'以前的字符数。
又如:
char f[]="123456\01111";
int b=strlen(f);//b=6,因为遇到了'\0'
扩展资料strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
⒈sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
⒉sizeof是取字节运算符(关键字),strlen是函数。
⒊sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'\0'结尾的。
⒋数组做sizeof的参数不退化,传递给strlen就退化为指针了。
⒌大部分编译程序 在编译的时候就把sizeof计算过了是类型或是变量的长度。这就是sizeof(x)可以用来定义数组维数的原因
参考资料:百度百科-strlen
推荐于 2019-09-01
查看全部5个回答
惠普官网首页-京东电脑办公,购特色!
关注华硕笔记本的都在看
惠普官网首页-「京东」电脑办公,笔记本/CPU/鼠标/键盘/打印机,应有尽有,一站购齐!
北京京东世纪信息技..广告
高中数学知识大全-高中九科全套重难点知识汇总资料下载
关注高中数学的都在看
高中数学知识大全,内容涵盖语文/数学/英语/政治/历史/地理/物理/化学/生物各门学科;各类知识点/试卷/习题/视频应有尽有,作文,听力,阅读专项突破
北京百家互联科技有..广告
相关问题全部
广告高中数学大全高考数学冲刺备考技巧,解题模板都在这了!
我将高中数学大全解题技巧总结为“12大招”“133个解题标志”,数学是能直接通过短时间补习提高分数的学科,“254个秒题方法”,跟我学快速提分。点击领取试听课程
572020-06-14
C语言中strlen()函数的意思?
strlen()是读取字符串长度的意思,举例如下 char a[]={'a','b','c'}; return strlen(a); 返回字符串a的长度,是3。 需要注意的是,strlen()函数需要的头文件。 如有疑问请您追问。
26 浏览12622017-12-15
在C语言中Strlen是什么意思?
Sizeof与Strlen的区别 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。 sizeof还可以用函数做参数,比如: short f(); printf("%d\n", sizeof(f())); 输出的结果是sizeof(short),即2。 4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 5.大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20; 6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。 7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。 8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小, 当适用一静态地空间数组, sizeof 归还全部数组的尺寸。 sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址, 如: fun(char [8]) fun(char []) 都等价于 fun(char *) 在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小 如果想在函数内知道数组的大小, 需要这样做: 进入函数后用memcpy拷贝出来,长度由另一个形参传进去 fun(unsiged char *p1, int len) { unsigned char* buf = new unsigned char[len+1] memcpy(buf, p1, len); } 我们能常在用到 sizeof 和 strlen 的时候,通常是计算字符串数组的长度 看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚: char str[20]="0123456789"; int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。 int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。 上面是对静态数组处理的结果,如果是对指针,结果就不一样了 char* ss = "0123456789"; sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是 长整型的,所以是4 sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类 型的,占了 1 位 strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen
49 浏览130012017-10-15
c++ strlen函数干嘛用,能详细点吗
strlen()是计算一个字符串的有效数据长度。 从你问题补充看,这里写的有问题,因为str不能是int类型,这样就不是字符串了,strlen()也不能正常工作了。 char str[1000]; strcpy( str , "hello world" ); //给str赋值 int i=strlen(str) ; //得到str中数据的长度,此时为11 = 5+1+5 字符串一定会有一个结束符,strlen在计算时,就是从str的首地址位置,一直到遇到\0为止,计算字符个数。返回给调用者。详情可查阅百科。
84 浏览108282017-10-10
strlen函数
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'这个字符的。
561 浏览771992017-09-09
使用strlen()函数的问题
字符串和字符数组的区别:字符串用字符数组保存,表示的是字符数组首地址到第一个'\0'为止的内容。 你的程序里,strlen(a)等于7,其实是strlen越界访问了。在a的4个字节后面,有一些未使用的内存,那边前3个字节非0,第4个字节是0,所以合起来'\0'前面有7个非0字符。
42 浏览86392017-10-05
3评论
来到火星的小A2
迪丽热巴回答c语言题目...
nfngng2
char f[]="123456\01111";
int b=strlen(f);//b=6,因为遇到了'\0' ;这里输出是9啊
评论两句3103
strlen(char *)
作用:检测字符串实际长度。
如:char s[]="1234567";
int a=strlen(s);//a=7
实际上strlen(char *)检测的是'\0',strlen(char *)碰到'\0'就返回'\0'以前的字符数。
又如:
char f[]="123456\01111";
int b=strlen(f);//b=6,因为遇到了'\0'
char h[4]={'f','0',0,'h'} ;//注:不能写成char h[4]="f0\0h";因为以""括起来的为字符串,
它隐式的以'\0'结尾,而'\0'也占一个字节,所以应写为char h[5]="f0\0h"
int c=strlen(h);//c=2,因为遇到了'\0'(注意'0'不等于'\0',而0等于'\0')
strlen(char *)
作用:检测字符串实际长度。
如:char s[]="1234567";
int a=strlen(s);//a=7
实际上strlen(char *)检测的是'\0',strlen(char *)碰到'\0'就返回'\0'以前的字符数。
又如:
char f[]="123456\01111";
int b=strlen(f);//b=6,因为遇到了'\0'
char h[4]={'f','0',0,'h'} ;//注:不能写成char h[4]="f0\0h";因为以""括起来的为字符串,它隐式的以'\0'结尾,而'\0'也占一个字节,所以应写为char h[5]="f0\0h"
int c=strlen(h);//c=2,因为遇到了'\0'(注意'0'不等于'\0',而0等于'\0')
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
#include
int main(void)
{char *s="Golden Global View";
printf("%s has %d chars",s,strlen(s));
getchar();
return 0;
}
首先要声明,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这样的话就能得到正确结果了。
1.xx[2][8]的内存是连续分配的
2.
01234567
0dAe,BfC.
1CCbbAA\0
本来在第一行最后应该是\0的,但是位置占满了,所以\0就到第二行了(由于内存的连续分配)
但是继续向第二行写数据的时候,C就把第一行的\0覆盖了,到最后再加上第二的\0
而strlen只认起始字符d然后开始数,直到\0为止
所以把dAe,BfC.CCbbAA都数上了,数到第二行的\0结束,所以是14个
int是占两字节,因为是数组,分配的是3个int所以应该是6字节
打印应该是2吧,strlen计算字符结果是不含\0的
3楼回答得不错,参考他的吧
c语言strlen函数问题
strlen实际上是,从参数表示的地址往后找,找到第一个'\0',即串尾。然后计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度。
charx[]={0xBC,0xDD,0xCA};中,实际上是定义了一个char型的数组,而由于x[0],即0xBC开始往后找,一直到0xCA,都没'\0',所以会继续往后。当然,实际上往后找到的是其他值。
改charx[]={0xBC,0xDD,0xCA,0x00};后,应该就是3了。
扩展资料:
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
函数原型
externunsignedintstrlen(char*s);
在VisualC++6.0或Dev-C++中,原型为
size_tstrlen(constchar*string);
,其中size_t实际上是unsignedint,在VC6.0或Dev-C++中可以看到这样的代码:
typedefunsignedintsize_t;
头文件:string.h或cstring
格式:strlen(字符数组名)
功能:计算给定字符串的(unsignedint型)长度,不包括'\0'在内
说明:返回s的长度,不包括结束符NULL。
参考资料:strlen-百度百科