strlen和sizeof的区别0

C语言中sizeof和strlen函数区别在哪

1、操作

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。 

而sizeof()返回的是变量声明后所占的内存数,不是实际长度。

2、参数类型

sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’’\0’’结尾的。 

3、类型

sizeof是操作符(关键字),strlen是函数。 

扩展资料

strlen函数原型:

size_t strlen(const char *string)

size_t 是无符号整数的别名,在vs2008编译器中可以查看其宏定义。

功能:

其功能是获取字符串的长度。 

返回值:

在MSDN文档中查看strlen函数的返回值,叙述如下。

Each of these functions returns the number of characters in string, excluding the terminal NULL. No return value is reserved to indicate an error.

每个函数都返回字符串中的字符数,不包括终端NULL。不保留返回值以指示错误。 

参数:

Null-terminated string

空终止字符串, 字符串标准库提供的头文件中包含操作以空字符结尾的字符串(null-terminated string)的函数。


参考资料:百度百科——strlen

c语言sizeof和strlen的区别是什么

一、指代不同

1、sizeof:用于获取字符串的长度,是处理字符串的重要工具。

2、strlen:所作的是一个计数器的工作。

二、规则不同

1、sizeof:可用于任何变量名、类型名或常量值,当用于变量名(不是数组名)或常量时,不需要用圆括号。

2、strlen:从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。

定义

sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。

MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t。

sizeof和strlen区别

1、sizeof是编译器算符,其结果是在编译期间生成的,运行时候不会变;strlen是函数,是运行时候计算结果的。
2、sizeof可用来计算不同类型的存储空间的实际大小,strlen只是计算字符串除结尾\0之外的长度。
3、对字符串来说,两者的值可能不同。例如:
char a=“abc“;
printf(“%d %d %d %d“,sizeof(a),strlen(a), sizeof(b), strlen(b) ); 结果是 4 3 10 3

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=“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
)
fun(char
)
都等价于
fun(char
*)
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小,
需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged
char
*p1,
int
len)
{
unsigned
char*
buf
=
new
unsigned
char
memcpy(buf,
p1,
len);
}
我们能常在用到
sizeof

strlen
的时候,通常是计算字符串数组的长度
看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:
char
str=“0123456789“;
int
a=strlen(str);
//a=10;
》》》》
strlen
计算字符串的长度,以结束符
0x00
为字符串结束。
int
b=sizeof(str);
//而b=20;
》》》》
sizeof
计算的则是分配的数组
str
所占的内存空间的大小,不受里面存储的内容改变。
上面是对静态数组处理的结果,如果是对指针,结果就不一样了
char*
ss
=
“0123456789“;
sizeof(ss)
结果
4
===》ss是指向字符串常量的字符指针,sizeof
获得的是一个指针的之所占的空间,应该是
长整型的,所以是4
sizeof(*ss)
结果
1
===》*ss是第一个字符
其实就是获得了字符串的第一位’0’
所占的内存空间,是char类
型的,占了
1

strlen(ss)=
10
》》》》
如果要获得这个字符串的长度,则一定要使用
strlen

sizeof和strlen在c语言的区别是什么

sizeof和strlen在c语言的区别是:用法不同。

sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。sizeof是算符,strlen是函数。sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。

strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

函数调用:

sizeof(函数名())

sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用,举例来说定义如下函数:

int myprint ()

{undefined

printf(“hello\n”);

return 0;}

int main()

{undefined

printf(“%d”,sizeof(mypaint()));

return 0;}

结果只打印函数返回类型的sizeof值,并没有打印hello说明函数myprint并没有调用。

sizeof与strlen的区别

1. strlen 是函数,sizeof 是运算符。

2. strlen 测量的是字符的实际长度,以’\0’ 结束。而sizeof 测量的是字符的分配大小。

比如:

char str = “hello“;

printf(“strlen: %d\n“, strlen(str));

printf(“sizeof: %d\n“, sizeof(str));

结果显示为:

strlen: 5

sizeof: 20

3.但是在子函数中,size of 会把从主函数中传进来的字符数组当作是指针来处理。指针的大小又是由机器来决定,而不是人为的来决定的。

#include 《stdio.h》

void size_of(char str)

printf(“sizeof:%d\n“, sizeof(str));

}

int main()

{

char str = “hello“;

size_of(str);

return 0;

}

结果显示为sizeof:4

4.我们知道字符数组的初始化一次性赋值,也可以逐个赋值。可以指定数组的大小,也可以不指定数组长度。

#include 《stdio.h》

#include 《string.h》

int main()

{

char str1 = “hello“;

char str2 = {’h’, ’e’, ’l’, ’l’, ’o’, ’\0’};

char str3 = {’h’, ’e’, ’l’, ’l’, ’o’};

printf(“str1:%s\n“,str1);

printf(“str2:%s\n“,str2);

printf(“str3:%s\n“,str3);

printf(“str1:%d\n“, strlen(str1));

printf(“str2:%d\n“, strlen(str2));

printf(“str3:%d\n“, strlen(str3));

return 0;

}

结果显示为:

str1:hello

str2:hello

str3:hellohello

str1:5

str2:5

str3:10

5.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。而大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。

6.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’’\0’’结尾的。

扩展资料:

sizeof(…)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。

由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。

strlen(…)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。

它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

sizeof和strlen在c语言的区别是什么

sizeof和strlen在c语言的区别如下:

1、类型不同:sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。

2、性质不同:sizeof是算符,strlen是函数。

3、参数不同:sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’’\0’’结尾的。sizeof还可以用函数做参数。

4、退化情况不同:数组做sizeof的参数不退化,传递给strlen就退化为指针了。

sizeof与strlen的区别

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。
char aa;cout《《strlen(aa)《《endl; //结果是不定的
char aa={’\0’}; cout《《strlen(aa)《《endl; //结果为0
char aa=“jun“; cout《《strlen(aa)《《endl; //结果为3
而sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数。
sizeof(aa) 返回10
int a; sizeof(a) 返回40
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=“0123456789“;
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
6.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。  
7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,
当适用一静态地空间数组, sizeof 归还全部数组的尺寸。
sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺

sizeof和strlen在c语言的区别是什么

区别如下:

1、指代上的区别

(1)sizeof:用来获取字符串长度的导引,是处理字符串的重要工具。

(2)strlen:做的是一个计数器。

2、用法上的区别

(1)sizeof:sizeof( type_name ); // sizeof(type); 在编译时有效,而不是在运行时有效。

(2)strlen:extern unsigned int strlen(char *s); 返回s的长度,不包含终止符NULL。

规则上的区别

(1)sizeof:可用于任何变量名,类型名或常量值。 当用于变量名(不是数组名)或常量时,不需要括号。

(2)strlen:从内存的某个特定位置开始扫描(可以是字符串的开头,中间的某个位置,甚至是不确定的存储区域),直到第一个字符串结束字符’\ 0’为止 ,然后返回计数器值。

C语言中sizeof和strlen函数区别在哪

size of求变量占用的字节数,包括结束符\0
strlen求变量的长度但是不包括\0