> 唯美句子 > strlen和sizeof有什么区别

strlen和sizeof有什么区别

strlensizeof有什么区别?

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 <=-====因为a是指针,结果是指针的大小

strlen(a)=5 <======依然是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是征对"类型"的。