strlen和sizeof有什么区别?
Sizeof与Strlen的区别与联系(转)
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
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
sizeof与strlen的区别
首先要对字符串要了解。字符串最后有个隐藏的字符'\0',标识该字符串结束。
'\n'是换行符号,只是一个字符而已。
sizeof 计算字符串长度时候会把最后的 '\0' 算进去,而strlen 不会。
所以一般结果就是 sizeof 计算出来的长度 比 strlen的长度要多1个字节。
例如:这个sizeof("hello")=6,而strlen("hello")=5。
但是sizeof 在计算数组的时候,是计算这个数组的最大长度,而不是数组内部数据的长度。
所以问题中的 strlen结果是5,而sizeof结果是10 。'\n'也占一个字节。
除此之外,还要注意,当sizeof后面带一个指针的时候,实际上是计算指针的长度,一般32位设备
指针长度是4个字节。而strlen依然是计算指针指向的长度。
例如:
char *a="hello";
sizeof(a)=4 <>
strlen(a)=5 <>
C语言中sizeof与strlen的区别是什么
sizeof获得是所占的字节数,所分配的空间的字节数。
strlen获得是长度(实际字符的个数)。
例如: char a[5]="abc";
sizeof(a) 等于5,因为分配了5个字节的空间。
而strlen(a)等于3,这是其实际字符的个数
c语言中strlen 与sizeof有什么区别?
strlen 是返回字符串的长度。
而sizeof,却是用来取得变量或类型所占用的内存大小的。
这个a数组的字符串长度为4(末尾的\0是不计入字符串长度的),但a是10个单位的char型,它占用的内存空间是10*sizeof(char),为10. sizeof 返回的数量的单位是Byte.
c语言中sizeof()和strlen()用法上有什么区别呢?
*
sizeof是操作符,不是函数。它后面的()并不是必须的,没有歧意时就不必写上了。sizeof操作符计算的是系统为它后面的变量或类型名分配的空间大小,无论其中是否存储了有用数据。
*
strlen()是库函数,()中必须是字符串指针或字符串常量,它返回的是检测对象中第一个'\0'前的字符个数,不含'\0'。
下面的代码可能对此解惑:
//#include?"stdafx.h"//If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"string.h"
int?main(void){
char?s[50]="1234",p[100]={'f','j','k','d','s','a','l','\0','1','2','3','4','5','\0'};
printf("sizeof(s)?=?%d\n",sizeof?s);//这里s没有加(),也正确
printf("strlen(s)?=?%d\nstrlen(p)?=?%d\n",strlen(s),strlen(p));
//上句检测p时遇到第一个'\0'就结束了
return?0;
}
C++中sizeof和strlen的区别是什么?
strlen:是C标准库中的字符串函数,用于统计字符的个数。
sizeof:是c语言中的运算符,确切的说是一个编译时运算符,用于统计类型或者变量所占的内存字节数。示例,以32位系统为例。
char?*str?=?"hello";
strlen(str);?//它的值是5,因为hello这个字符串有5个字符
sizeof(str);?//它的值是4,因为char?*是一个指针类型,它占4个字节。
sizeof("hello");?//它的值是5,是因为hello有5个字符,每一个字符占1个字节。
int?a[2]?=?{0};
sizeof(a);?//它的值是8,因为a中有2个int型变量,每个int型占4个字节,所以8字节
c语言的size of,strlen什么意思
sizeof函数是计算数据空间的字节数;
strlen函数是计算字符数组的字符数,以"\0"为结束判断,不包含结束字符'\0'。
举例说明如下:
int?a;
char?b[]="abcd";
printf("%d",?sizeof(a));??//?输出变量a所占的内存字节数,输出4
printf("%d",?sizeof(b));??//?输出字符数组b所占的内存字节数,输出5(5=4+1,1为结束字符所占的内存)
printf("%d",?strlen(b));??//?输出字符数组b中字符的个数,输出4(不含结束字符''\0)
c++中strlen()和.size()有什么区别?用法有什么不同?
strlen() 是函数,测定字符串的长度,字符串的结束符是 \0
.size() 这个名字,好几个类都用来作 成员函数名,不同的类的 .size() 有各自的定义。正如人名小花,张家有张家的小花,李家有李家的小花,此小花非那小花。
.size() 一般测定大小。
例如字符串:
char str[]="1234abcd\0XYZ";
strlen(str) 得 8, 不计 结束符 \0 和它以后的 字节。
sizeof(str) 得 12,计入 结束符 \0 和它以后的 字节
.size() 功能 通常 类似 sizeof()。
C语言中,sizeof和strlen都是表示字符串长度的吗?谁能告诉我它们两者的区别~~
sizeof 计算的是数据在内存中存放的长度,单位是“字节”,可以对任何数据类型做运算,而且它是一个运算符(和+、-、*、\类似);当对字符串计算时,包含末尾的"\0";当对字符数组操作时,返回的是数组的总的长度,也就是当把数组作为参数传递给sizeof时是不会退化的。strlen 计算的是字符串的长度,单位是“字符”,只能对字符串运算,而且它是函数(不是运算符),计算时,不包含末尾的"\0";当对字符数组操作时,返回的是数组总存放的字符串的实际长度(也就是\0之前的),也就是当把数组作为参数传递给strlen时是会退化成char*指针的。例如:char* str = "Hello!";sizeof(str)值为7;strlen(str)值为6;char str[20] = "Hello!";sizeof(str)值为20;strlen(str)值为6;
strlen的区别sizeof
1、区别:
(1)strlen是函数,sizeof是运算符。
(2)strlen是有效字符串的长度,不包含?\0?,与初始化有关系,而sizeof与初不初始化没有关系
(3)strlen只能用char*做参数,且必须是以'\0'结尾的,用来计算字符串的长度;sizeof可以用类型做参数,用来计算类型占内存大小。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。
(5)strlen的结果在运行时才能计算出来,而sizeof在编译时计算。
2、相关概念:
(1)strlen是计算机C语言函数,计算字符串s的(unsigned int型)长度,不包括'\0'在内。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。
(2)sizeof是C语言的一种单目操作符,如C语言的++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。其实可以简单的理解sizeof是征对"类型"的。
转载请注明出处句子大全网 » strlen和sizeof有什么区别