strlen和sizeof的区别 sizeof跟strlen区别
2024-11-10 09:55 - 立有生活网
sizeof strlen strcpy函数什么含义
sizeof是一个关键字,用来判断一个数据类型的长度。可以用于变量,也可以用于对象。
strlen和sizeof的区别 sizeof跟strlen区别
strlen和sizeof的区别 sizeof跟strlen区别
例如 char a; sizeof(char); sizeof(a);两种写法都是可以的,值都是1.
如果是对变量的话,可以省去括号,例如写成: sizeof a;也是正确的,值还是1.
strlen是一个函数,用于后者是测类型所占字节数,可不是元素个数。char=1,int = 4.计算字符串的长度。
strlen计算字符串长度的时候,当碰到字符串中'0'就结束了,与sizeof有一定区别,sizeof计算的是字符串占的全度。
例如: char a[3]="ab"; 在内存中实际是:a[0]='a',a[1]='n',a[3]='0';
strlen计算时值数到'0',所以strlen(a)=2; 而 sizeof(a)=3,因为它数的是占的全部空间。
strcpy是一个函数,用于一个内容的数据类型必须用括号括住。如sizeof(int)。,一般用于字符串。
原型声明:extern char strcpy(char dest,const char src);
头文件:string.h
功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足该类型保证能容纳实现所建立的对象的字节大小。够的空间来容纳src的字符串。
sizeof 以字节形式给出了其作数的存储大小;
strlen字符串的长度;
strcpy字符串
c++中的sizeof是什么意思
b=sizeof(str);一、sizeof的概念
sizeof是C语言的一种单目作符,如C语言的其他作符++、--等。它并不是函数。sizeof作符以字节形式给出了其作数的存储大小。作数可以是一个表达式或括在括号内的类型名。作数的存储大小由作数的类型决定。
1、用于数据类型
sizeof使用形式:sizeof(type)
2、用于变量
sizeof作符的结果类型是size_t,它在头文件
1、若作数具有类型char、unsignedchar或signedchar,其结果等于1。
ANSIC正式规定字符类型为1字节。
2、int、unsignedint、shortint、unsignedshort、longint、unsignedlong、
float、double、longdouble类型的sizeof在ANSIC中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、
4、4、4、8、10。
3、当作数是指针时,sizeof依赖于编译器。例如MicrosoftC/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。
4、当作数具有数组类型时,其结果是数组的总字节数。
让我们看如下结构:
struct{charb;doublex;}a;
在某些机器上sizeof(a)=12,而一般sizeof(char)+sizeof(double)=9。
这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。
6、如果作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。
四、sizeof与其他作符的关系
sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他作符一起组成表达式。如isizeof(int);其中i为int类型变量。
五、sizeof的主要用途
1、sizeof作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如:
size_tfread(voidptr,size_tsize,size_tnmemb,FILEstream)。
2、sizeof的另一个的主要用途是计算数组中元素的个数。例如:
voidmemset(voids,intc,sizeof(s))。
六、建议
由于作数的字节数在实现时可能出现变化,建议在涉及到作数字节大小时用sizeof来代替常量计算。
1.sizeof作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
2.sizeof是算符
3.sizeof可以用类型做参数,sizeof还可以用函数做参数,比如:
short f();
printf("%dn",1、sizeof(2);//2的类型为int,所以等价于sizeof(int); sizeof(f()));
4.数组做sizeof的参数不退化。
5.大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char str[20]="0123456sizeof 是关键字,求 类型的长度。比如 int a[10]="hello";sizeof (a)=10;789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
7.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,
sizeof 作符不能返回动态地被分派了的数组或外部的数组的尺寸
char str[20]="0123456789";
int b=sizeof(str); //b=20; >>>> sizeof 计算的则是分配的数组
char ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4
sizeof(ss) 结果 1 ===》ss是个字符 其实就是获得了字符串的位'0' 所占的内存空间,是char类型的,占了 1 位
size 大小的意思,of什么的大小。顾名思义,就是返回一个参数的大小。
例如
int a[20];
你试试就知道了:)
楼上你的例子中 sizeof(a) 是对指针做的,只会返回指针的大小 也就是4。要返回数组大小应该使用 sizeof(a[])。
在C语言中Strlen是什么意思?
sizeof(ss)strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到个字符串结束符'0'为止,然后返回计数器值(长度不包含'0')。
解答:char str【100】中声明了字符数组空间100个字节,所以为100,如果去掉数组中下标100,那么sizeof()结果就为“HELLO”占用空间字节数+'0'即6。,就是说你要多少我给你申请多少。函数原型:
extern unsigned int strlen(char s);
在Visual C++ 6.0或Dev-C++中,原型为
size_t strlen(const char string);
,其中size_t实际上是unsigned int,在VC6.0或Dev-C++中可以看到这样的代码:
typedef unsigned int size_t;
头文件:string.h或cstring
格sizeof使用形式:sizeof(var_name)或sizeofvar_name式:strlen (字符指针表达式)
功能:计算给定字符串的(unsigned int型)长度,不包括'0'在内
扩展资料
实例——
(在 Dev-C++ 5.11中运行通过)
//#include
#include
#include
#include
using namespace std;
int main(void)
{ios::sync_with_stdio(false);
cout << s << "has" << strlen(s) << "character(s)." << endl;
return 0;
}运行结果为:
Hello, World! has 13 character(s).
Sizeof与Strlen的区别
1.sizeof作符的结果类型是size_t,它在头文件中typedef为unsignedint类型。
2.sizeof是算符,strlen是函数。
3.sizeof可以用类型做参数,strlen只能用char做参数,且必须是以''0''结尾的。
sizeof还可以用函数做参数,比如:
short f();
printf("%dn", sizeof(f()));
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是个作符不是个函数。
sizeof 作符不能返回动态地被分派了的数组或外部的数组的尺寸
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";
长整型的,所以是4
sizeof(ss) 结果 1 ===》ss是个字符 其实就是获得了字符串的位'0' 所占的内存空间,是char类
型的,占了 1 位
strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen
strlen():返回一个串有多少个字符
sizeof():返回某类型占几个字节。如:int a;则sizeof(a)返回值为2。如果有定义float x;则sizeof(x)返回值为4.
strlen是求字符串实际长度的意思,例如char str=“hello world”。则strlen[str]的返回值是11.sizeof是用来求一个变量所占的内存的。
strlen是库函数,计算字符串长度。
sizeof是作符,计算变量长度。
strlen是求字符串的长度,但不包括字符串的null结束符
int strlen(char )
返回实参字符串的长度,不包括"0".
C++ length()、size()、sizeof()三者的区别
6.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个作符不是个函数。c++中,length()只是用来获取字符串的长度。
c++中,在获取字符串长度时,size()函数与length()函数作用相同。
除此之外,size()函数还可以获取vector类型的长度。
sizeof()运算符用来求对象所占内存空间的大小如sizeof(max)若此时变量max定义为intmax(),sizeof(char_v)若此时char_v定义为charchar_v[MAX]且MAX未知,sizeof(void)都不是正确形式。。
需要注意的是,如果不使用Vector作为数组进行参数传递比如这里x应该是个int型数组,那么用这个数组的大小,除以int型数据的大小,就得到这个数组的长度。(注:这个数组必须是静态数组),那么在传递数组引用是需要再传递一个数组的大小,否则在函数中无法根据首地址计算出数组大小。
注意 :获取字符数组长度时,使用strlen(a)和下面将要介绍的sizeof(a) / sizeof(a[0]) 得到的结果略有别,sizeof(a) / sizeof(a[0]) 会把char数组的 '0' 也算入在内。所以得到的大小会比strlen得到的大一。例如:
注意,ja获取数组长度时,length并不是一个方法
设有说明语句:char x[20]="good0morning";printf(“%d %dn”,strlen(x), sizeof(x))输出结果
1) sizeof( object ); // sizeof( 对象 );你首先要明白strlen与sizeof的区别
sizeof计算实际开辟的存储空间,二strlen只会计算'0'前面的字符个数,注意不包括’0‘。4 20
strlen(x) 是字符串x的长度, 注意:sizeof作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。应为4
sizeof(x) 是char指针的长度,32位中为4,64位中指针长度为8
32输出: 4 4
64位输出 4,8
关于c语言的题目
strlen("abchar str[100] = "Hello" sizeof(str) = 100; str被定义为100个字节的字符数组cd")的值为4,不计算后面的'0'首先 ,你得明白sizeof和strlen的区别。
另外,(++a)和(a++),只有++a可以作为左值,所以(++a)+=a正确,是先算++a,a=5,然后,计算a=a+a,所以是10.
sizeof(str) = 100
如果char str【】=“Hello”那么sizeof(str)= 6
(a++)+=a不是正确的表达式,因a++不能作为左值
(++a)+=a是正确的表达式, ++a可以作为左值,结果应为 a= 9
1、char str【100】=“Hello”中sizeof(str)=100
2、a=4,(a++)+=a表达式是有问题的,a++不能作为左值,不要对a++进行赋值,a++ 返回的是一个临时的值,而不是a变量本身,所以不能对a++赋值,而++a是先进行了a=a+1=5运算,a变量中存放的是已定值5,可以对变量a进行赋值。计算结果为10
3、遇到问题,多上机,多想想为什么,想深刻点,祝你学业有成
char str[] = "Hello" sizeof(str) = 6; str未定义长度,但有初始化且加上'0'
a=4,(a++)+=a 是错误的,因为a++后 a的值是5,是常量,不能在对a++赋值。
你上机试验下部就好了吗?
printf("%d",sizeof(str));
理论过后上机实如果是a[]="bcdef";则有效长度是strlen测出来的,而sizeof测出来的还包含'0'这个位;验!
C语言中“SIZEOF(INT)“是什么意思?有什么作用?
//printf("%s has %d character(s).",s,strlen(s));C语言中“SIZEOF(INT)“指的是求括号中的类型,或者变量的大小。
9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,sizeof是计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示(当然用在字符数组计算"0"的大小)。
在32位的系统中,sizeof(int)的值为4。
如果x是int型的数组,则sizeof(x)/sizeof(int)代表x的位数。
扩展资料:
sizeof有三种语法形式,如下:
2、sizeof(type_name);//sizeof(类型);
3、sizeof object;//sizeof对象;
所以,
1、int i;2、sizeof(i);//ok3、sizeof i;//ok4、sizeof(int);//ok5、sizeof int;//error
同种类型的不同对象其sizeof值都是一致的。这里,对象可以进一步延伸至表达式,即sizeof可以对一个表达式求值,编译器根据表达式的最终结果类}我们能常在用到型来确定大小,一般不会对表达式进行计算。
2、sizeof(2+3.14);//3.14的类型为double,2也会被提升成double类型,所以等价于sizeof(double);sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用。
参考资料:
sizeof是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占字节个数的作运算符。sizeof(int)的作用是算出int类型的长度 。
对于数据类型的sizeof,取决于CPU位数,编译器,汇编等,32位系统下是4个字节,64位系统化下是8个字节。
扩展资料:
Sizeof与Strlen的区别与联系
(1)sizeof作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。其值在编译时即计算好了,strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度。
(3)sizeof可以用类型做参数,strlen只能用char做参数,且必须是以“0”结尾的。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针了。
参考资料来源:
sizeof()顾名思义size of ...某某的大小长度。如果是sizeof(int)那就意味着一个int型的长度。8位代表一个字节长度,所以如果是一般使用的tc编译器(16位的)那么sizeof(int)就等于2。
sizeof(int)
计算参数的长度,单位为字节。
在16位系统上,如dos、tc,Sizeof(int)=2;
在32系统上,=4.
在数据处加入它,是为了保持数据的完整性和兼容型
例如:fwrtie()中的len就需要sizeof,以保证在不同的系统中保持数据的一致性。
sizeof(int)就是告诉你int的大小(占的位数),16位就是2,32位就是4
获得一个int型变量在内存中占的空间,一般在molloc函数中使用,告诉molloc函数你要申请分配的空间有多大
就是取得int类型变量的字节长度。
C语言没有SIZEOF作符,只有sizeof
strlen和sizeof有什么区别?
Sizeof与Strlen的区别与联系(转)
1.sizeof作符的结果类型是size_t,它在头文件中typedef为unsigned
int类型。
2.sizeof是算符,strlen是函数。
3.sizeof可以用类型做参数,strlen只能用char做参数,且必须是以''0''结尾的。
sizeof还可以用函数做参数,比如:
short
f();
pria=strlen(str);ntf("%d
",
sizeof(f()));
4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
5.大部分编译程序
在编译的时候就把sizeof计算过了
是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char
str[20]="0123456789";
//a=10;
6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。
7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个作符不是个函数。
8.当适用了于一个结构类型时或变量,
返回实际的大小,
当适用一静态地空间数组,
归还全部数组的尺寸。
作符不能返回动态地被分派了的数组或外部的数组的尺寸
如:
fun(char
[8])
fun(char
[])
都等价于
fun(char
)
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小,
需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged
char
p1,
len)
{unsigned
buf
=new
unsigned
char[len+1]
memcpy(buf,
p1,
len);
和strlen
的时候,通常是计算字符串数组的长度
看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:
char
str[20]="0123456789";
//a=10;
>>>>
strlen
计算字符串的长度,以结束符
0x00
为字符串结束。
>>>>
计算的则是分配的数组
str[20]
所占的内存空间的大小,不受里面存储的内容改变。
ss
="0123456789";
结果二、sizeof的使用方法
4===》ss是指向字符串常量的字符指针,sizeof
获得的是一个指针的之所占的空间,应该是
长整型的,所以是4
sizeof(后者返回值是字符串X的字符串长度(不包含终止符 0)ss)
结果
1===》ss是个字符
其实就是获得了字符串的位'0'
所占的内存空间,是char类
型的,占了
1位
strlen(ss)=
10
>>>>
如果要获得这个字符串的长度,则一定要使用
strle
sizeof(x),strlen(x)请问这两个是什么意思?
(2) sizeof是运算符,strlen是函数。原型: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;。
头int文件:string.h
格式:strlen (字符数组名)
功能:计算字符串s的(unsigned int型)长度,不包括'0'在内
说明:返回s的长度,不包括结束符NULL。
sizeof()是C/C++中的一个作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
MSDN上的解释为: The sizeof keyword gives the amount o输出的结果是sizeof(short),即2。f 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有三种语法形式,如下:
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
这个sizeof(x )是求括号中的变量或值所点的字节数, 而这个strlen(x)是求这个X(这个可以是一个字符串)的长度, 不包括“/0”
前者.sizeof作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
sizeof是算符,strlen是函数。
请问说数组长度是指有效长度(strlen统计出的数)还是指sizeof统计出的数呢?谢谢啦
而其余的sizeof,无论str+N都是计算的指针的长度,我们知道指针都是长度四比如说定义一个数组a[10]则气有效长度就是sizeof是 规定多大长度的整型数如:8位,16位,32位等测出来的;
数组长度是指他实际的长度,用sizeof计算出来的。
应该是实际有多少内容吧,strl那么sizeof(a)是10(数组长度)en的长度
sizeof是占用了多少内存空间
回家的路孩子你别忘伴奏视频 回家的路孩子你
回家的路孩子别忘在那本诗歌上了 可怜天下父母心,从小好不容易把她他们养大,长大走向,离开父母,开创自己的一片天地。父母呢,任凭他们远离高飞,希望儿女经常回家看看。 回家的路孩子···
连花清瘟胶囊预防甲流 连花清瘟胶囊预防甲流
甲流吃什么可以预防 连花清瘟胶囊,板蓝根颗粒,没事就买了吃,总有点效果的。 连花清瘟胶囊预防甲流 连花清瘟胶囊预防甲流效果好吗 连花清瘟胶囊预防甲流 连花清瘟胶囊预防甲流效果好吗···
西宁市城市介绍(西宁城市历史)
大家好,今日天天来为大家解答以上的问题。西宁市城市介绍,西宁城市历史很多人还不知道,现在让我们一起来看看吧! 西宁市城市介绍(西宁城市历史) 西宁市城市介绍(西宁城市历史) 西宁市城···