strlen函数和sizeof,c语言sizeof和strlen的区别
strlen函数和sizeof,c语言sizeof和strlen的区别详细介绍
本文目录一览: sizeof(x),strlen(x)请问这两个是什么意思?
后者返回值是字符串X的字符串长度(不包含终止符
\0)
前者.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned
int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
sizeof是算符,strlen是函数。
这个sizeof(x
)是求括号中的变量或值所点的字节数,
而这个strlen(x)是求这个X(这个可以是一个字符串)的长度,
不包括“/0”
sizeof(str),其中str为字符串的头指针,指针占的空间为4字节,即为4
strlen(str),计算str的有效长度,hello长度为5,输出为5;
sizeof(s),s
是一个字符串,此时,sizeof
计算的是这个字符串的长度,除了hello占5个字节以外,还有一个字节的'\0'表示字符串结束,总共为6;
希望楼主能明白
c语言sizeof和strlen的区别
char name[]="nike" ;
sizeof(name)=5
如果数组定义成int,就不能用scanf("%s",name);来输入字符串了,因为这两个类型是不同的。%s只能输入char字符串数据
sizeof运算符计算的是操作数类型的大小,只是数组会乘以长度而已,和传入的具体内容无关。
要强行输出5的话那就sizeof("nike")吧……
要强行可以计算补了0长度的那就strlen+1
\0 只在char型数组中才有。
区别如下:
1、指代上的区别
(1)sizeof:用来获取字符串长度的导引,是处理字符串的重要工具。
(2)strlen:做的是一个计数器。
2、用法上的区别
(1)sizeof:sizeof( type_name ); // sizeof(type); 在编译时有效,而不是在运行时有效。
(2)strlen:extern unsigned int strlen(char *s); 返回s的长度,不包含终止符NULL。
定义
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(x),strlen(x)请问这两个是什么意思?
原型: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。
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.
其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为 typedef unsigned int size_t; 世上编译器林林总总,但作为一个规范,它们都会保证char、signed char和unsigned char的sizeof值为1,毕竟char是我们编程能用的最小数据类型。
2. 语法: sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
这个sizeof(x )是求括号中的变量或值所点的字节数, 而这个strlen(x)是求这个X(这个可以是一个字符串)的长度, 不包括“/0”
后者返回值是字符串X的字符串长度(不包含终止符 \0)
前者.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
sizeof是算符,strlen是函数。
sizeof(x)表示求它的字节长如sizeof(char)=1 ,strlen(x)求其字符串的长度
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。
C语言中strlen()函数和sizof()函数分别怎么用?区别是什么
strlen函数的参数是字符串,而sizeof函数的参数是类型或者变量,如果传入的是变量,则返回的是变量类型的大小,如果传入的是数组,则返回的是数组类型的大小乘以数组的元素个数,如果传入一个字符串指针,返回的是指针的大小。这两个新手容易混淆。如果仍有什么不明白,请追问。
记得采纳啊
本来不想发言的,但看到楼上的回答说strlen()计算字符串时连'\0'也算上,我顿时无语。 那你调试一下看看,看看是不是算上'\0'? strlen()是遇到'\0'就结束计算,是不计'\0'的。这一点要记住。 sizeof()是计算变量或者类型占用内存空间的字节数。 如果有 char str[] = "asdfg"; printf("%d\n", strlen(str)); printf("%d\n",sizeof(char)); printf("%d\n",sizeof(str)); 结果会是 5 1 6 从上面就可以看出strlen()是不计'\0' char是类型,可以用sizeof()操作,char占用一个字节 因为str是变量,所以可以用sizeof()计算它占用内存的字节数,又一个字符是占用一个字节内存,所以数组str占用6个字节 以上就是sizeof()和strlen()使用的区别
strlen() 是统计字符串的长度,要加上'\0'例如strlen("abcd");这时返回值是5因为还有一个'\0' sizof()是统计一个字符串占用的字节数例如sizeof("abcd");这里返回值是4,它不加最后的'\0'
简单的说 strlen() 是统计一个字符串有几个字符,这时要算上'\0'。 sizof()是统计一个字符串占用了几个字节
strlen是求字符串的大小,sizeof是求变量占的内存的大小
1、用法:
strlen(char* pstr);//求的是字符串的实际长度
sizeof(类型说明符,数组名或表达式) 或sizeof ( 变量名)
比如说有以下数据类型:int arr[10] ,a; char *str="hello world"; sizeof(arr)/sizeof(a)/sizeof(str)都是可以的,但是只能使用strlen(str),而不能strlen(arr);
2、区别:
2.1 sizeof()是C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。
2.2 strlen()求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
总结的说来sizeof的适用范围更广,但是在返回实际的字符数组中的数据是,strlen()更方便,因为它返回的是实际的字符串长度,而sizeof是返回数组大小。
c语言,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
C语言中sizeof与strlen的区别是什么
区别如下:
1、指代上的区别
(1)sizeof:用来获取字符串长度的导引,是处理字符串的重要工具。
(2)strlen:做的是一个计数器。
2、用法上的区别
(1)sizeof:sizeof( type_name ); // sizeof(type); 在编译时有效,而不是在运行时有效。
(2)strlen:extern unsigned int strlen(char *s); 返回s的长度,不包含终止符NULL。
3、规则上的区别
(1)sizeof:可用于任何变量名,类型名或常量值。 当用于变量名(不是数组名)或常量时,不需要括号。
(2)strlen:从内存的某个特定位置开始扫描(可以是字符串的开头,中间的某个位置,甚至是不确定的存储区域),直到第一个字符串结束字符'\ 0'为止 ,然后返回计数器值。
sizeof与strlen的区别
首先说明一点,char类型占一个字节,所以sizeof(char)是1,这点要理解
str1是一个指针,只是指向了字符串"absde"而已。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以sizeof(str1)=sizeof(char*)=4,在C/C++中一个指针占4个字节
str2是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空间,所以sizeof(str2)取得的是字符串"absde"占的总空间。"absde"中,共有a b s d e \0六个字符,所以str2数组的长度是6,所以sizeof(str2)=6*sizeof(char)=6
str3已经定义成了长度是8的数组,所以sizeof(str3)为8
str4和str2类似,'0' '1' ... '9'加上'\0'共11个字符,所以ss占的空间是8
总之,对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char*与char[]容易混淆,一定要分清,而且char*="aaa"的写法现在不被提倡,应予以避免
而strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。
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字节
sizeof(str),其中str为字符串的头指针,指针占的空间为4字节,即为4
strlen(str),计算str的有效长度,hello长度为5,输出为5;
sizeof(s),s是一个字符串,此时,sizeof计算的是这个字符串的长度,除了hello占5个字节以外,还有一个字节的'\0'表示字符串结束,总共为6;
希望楼主能明白
sizeof和strlen没有任何相似的地方。
strlen计算的是字符串长度的函数,直到遇到'\0'结束,结果不包括'\0'在内。
sizeof是一个运算符,在编译的时候就计算结果了,可以确定一个变量、类型、数组占用的内存空间。
sizeof()求的是字节数,不同类型的数据在内存中的字节数是不一样的,对于字符串来说,也就是字符的个数,因为一个字符占1个字节的内存,当然这里包括字符串最后的'\0'字符。
而strlen()求的是字符串的长度,也就是字符的个数,不包括最后的'\0'字符
1. strlen 是函数,sizeof 是运算符。
2. strlen 测量的是字符的实际长度,以'\0' 结束。而sizeof 测量的是字符的分配大小。
比如:
char str[20] = "hello";
printf("strlen: %d\n", strlen(str));
printf("sizeof: %d\n", sizeof(str));
结果显示为:
strlen: 5
sizeof: 20
3.但是在子函数中,size of 会把从主函数中传进来的字符数组当作是指针来处理。指针的大小又是由机器来决定,而不是人为的来决定的。
#include
void size_of(char str[])
{
printf("sizeof:%d\n", sizeof(str));
}
int main()
{
char str[20] = "hello";
size_of(str);
return 0;
}
结果显示为sizeof:4
4.我们知道字符数组的初始化一次性赋值,也可以逐个赋值。可以指定数组的大小,也可以不指定数组长度。
#include
#include
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
c语言?字符数组?字符指针?sizeof?strlen?的区别
简单概括,strlen()返回的是字符数组或者字符指针中的元素个数,sizeof返回的是字符数组中所有元素所占的总字节数,对于字符指针,返回的只是指针所占的字节数,32位系统上都是4字节。具体来说有如下几点区别:
1.
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned
int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
2.
sizeof是算符,strlen是函数。
3.
sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
4.
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
5.
大部分编译程序在编译的时候就把sizeof计算过了,是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因。
char
str[20]="0123456789";
//
str是编译期大小已经固定的数组
int
a=strlen(str);
//
a=10;
//strlen()在运行起确定,计算的是实际长度
int
b=sizeof(str);
//
而b=20;
//sizeof()在编译期确定,str的类型是int[20],计算的是占据内存的大小
6.
strlen的结果要在运行的时候才能计算出来,是用来计算字符串的实际长度,不是类型占内存的大小。
7.
sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
char
c;
sizeof
c;
//变量名可以不加括弧
8.
当适用于一个结构类型或变量,
sizeof
返回实际的大小,
当适用一静态地空间数组,
sizeof
归还全部数组的尺寸。
sizeof
操作符不能返回动态地被分派了的数组或外部的数组的尺寸
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)