strlen和sizeof有什么区别? C语言中sizeof与strlen的区别是什么
c\u8bed\u8a00\u4e2dstrlen \u4e0esizeof\u6709\u4ec0\u4e48\u533a\u522b\uff1fstrlen \u662f\u8fd4\u56de\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\u3002
\u800csizeof\uff0c\u5374\u662f\u7528\u6765\u53d6\u5f97\u53d8\u91cf\u6216\u7c7b\u578b\u6240\u5360\u7528\u7684\u5185\u5b58\u5927\u5c0f\u7684\u3002
\u8fd9\u4e2aa\u6570\u7ec4\u7684\u5b57\u7b26\u4e32\u957f\u5ea6\u4e3a4\uff08\u672b\u5c3e\u7684\0\u662f\u4e0d\u8ba1\u5165\u5b57\u7b26\u4e32\u957f\u5ea6\u7684\uff09\uff0c\u4f46a\u662f10\u4e2a\u5355\u4f4d\u7684char\u578b\uff0c\u5b83\u5360\u7528\u7684\u5185\u5b58\u7a7a\u95f4\u662f10*sizeof(char)\uff0c\u4e3a10. sizeof \u8fd4\u56de\u7684\u6570\u91cf\u7684\u5355\u4f4d\u662fByte.
\u4e00\u3001\u6307\u4ee3\u4e0d\u540c
1\u3001sizeof\uff1a\u7528\u4e8e\u83b7\u53d6\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\uff0c\u662f\u5904\u7406\u5b57\u7b26\u4e32\u7684\u91cd\u8981\u5de5\u5177\u3002
2\u3001strlen\uff1a\u6240\u4f5c\u7684\u662f\u4e00\u4e2a\u8ba1\u6570\u5668\u7684\u5de5\u4f5c\u3002
\u4e8c\u3001\u89c4\u5219\u4e0d\u540c
1\u3001sizeof\uff1a\u53ef\u7528\u4e8e\u4efb\u4f55\u53d8\u91cf\u540d\u3001\u7c7b\u578b\u540d\u6216\u5e38\u91cf\u503c\uff0c\u5f53\u7528\u4e8e\u53d8\u91cf\u540d\uff08\u4e0d\u662f\u6570\u7ec4\u540d\uff09\u6216\u5e38\u91cf\u65f6\uff0c\u4e0d\u9700\u8981\u7528\u5706\u62ec\u53f7\u3002
2\u3001strlen\uff1a\u4ece\u5185\u5b58\u7684\u67d0\u4e2a\u4f4d\u7f6e\uff08\u53ef\u4ee5\u662f\u5b57\u7b26\u4e32\u5f00\u5934\uff0c\u4e2d\u95f4\u67d0\u4e2a\u4f4d\u7f6e\uff0c\u751a\u81f3\u662f\u67d0\u4e2a\u4e0d\u786e\u5b9a\u7684\u5185\u5b58\u533a\u57df\uff09\u5f00\u59cb\u626b\u63cf\uff0c\u76f4\u5230\u78b0\u5230\u7b2c\u4e00\u4e2a\u5b57\u7b26\u4e32\u7ed3\u675f\u7b26'\0'\u4e3a\u6b62\uff0c\u7136\u540e\u8fd4\u56de\u8ba1\u6570\u5668\u503c\u3002
\u4e09\u3001\u7528\u6cd5\u4e0d\u540c
1\u3001sizeof\uff1asizeof( type_name ); // sizeof( \u7c7b\u578b )\uff1b\u7f16\u8bd1\u65f6\u8d77\u4f5c\u7528\uff0c\u800c\u4e0d\u662f\u8fd0\u884c\u65f6\u3002
2\u3001strlen\uff1aextern unsigned int strlen(char *s)\uff1b\u8fd4\u56des\u7684\u957f\u5ea6\uff0c\u4e0d\u5305\u62ec\u7ed3\u675f\u7b26NULL\u3002
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-sizeof()
\u53c2\u8003\u8d44\u6599\u6765\u6e90\uff1a\u767e\u5ea6\u767e\u79d1-strlen
区别:
一、定义不同
sizeof是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
2、它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:数组——编译时分配的数组空间大小;指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4)。
二、语法不同
1、strlen是函数,要在运行时才能计算。参数必须是字符型指针。当数组名作为参数传入时,实际上数组就退化成指针了。
2、它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
扩展资料
1、sizeof是算符,strlen是函数。 数组做sizeof的参数不退化,传递给strlen就退化为指针了。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。
2、sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。
参考资料:百度百科: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
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。
charaa[10];cout<<strlen(aa)<<endl;//结果是不定的
charaa[10]={'\0'};cout<<strlen(aa)<<endl;//结果为0
charaa[10]="jun";cout<<strlen(aa)<<endl;//结果为3
而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度。
sizeof(aa)返回10
inta[10];sizeof(a)返回40
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
2.sizeof是算符,strlen是函数。
3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
sizeof还可以用函数做参数,比如:
shortf();
printf("%d\n",sizeof(f()));
输出的结果是sizeof(short),即2。
4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
5.大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
charstr[20]="0123456789";
inta=strlen(str);//a=10;
intb=sizeof(str);//而b=20;
6.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。
7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
8.当适用于一个结构类型时或变量,sizeof返回实际的大小,当适用于静态的空间数组,sizeof归还全部数组的尺寸。
sizeof操作符不能返回被动态分派的数组或外部数组的尺寸
9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
如:
fun(char[8])
fun(char[])
都等价于fun(char*)
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小,需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsigedchar*p1,intlen)
{
unsignedchar*buf=newunsignedchar[len+1]
memcpy(buf,p1,len);
}
我们经常使用sizeof和strlen的场合,通常是计算字符串数组的长度
看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:
charstr[20]="0123456789";
inta=strlen(str);//a=10;>>>>strlen计算字符串的长度,以结束符0x00为字符串结束。
intb=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返回字符个数.//正确
在使用sizeof时,有一个很特别的情况,就是数组名到指针蜕变,
charArray[3]={'0'};
sizeof(Array)==3;
char*p=Array;
strlen(p)==1;//sizeof(p)结果为4
在传递一个数组名到一个函数中时,它会完全退化为一个指针
----------------------------------------------------------
看完以上你是否很清楚sizeof和strlen的区别了呢?还不明白的话,我们看下面几个例子:
第一个例子
char*ss="0123456789";
sizeof(ss)结果4===》ss是指向字符串常量的字符指针
sizeof(*ss)结果1===》*ss是第一个字符
大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度
这就是sizeof(x)可以用来定义数组维数的原因
charstr[20]="0123456789";
inta=strlen(str);//a=10;
intb=sizeof(str);//而b=20;
大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度
这就是sizeof(x)可以用来定义数组维数的原因
charstr[20]="0123456789";
inta=strlen(str);//a=10;
intb=sizeof(str);//而b=20;
charss[]="0123456789";
sizeof(ss)结果11===》ss是数组,计算到\0位置,因此是10+1
sizeof(*ss)结果1===》*ss是第一个字符
charss[100]="0123456789";
sizeof(ss)结果是100===》ss表示在内存中的大小100×1
strlen(ss)结果是10===》strlen是个函数内部实现是用一个循环计算到\0为止之前
intss[100]="0123456789";
sizeof(ss)结果400===》ss表示在内存中的大小100×4
strlen(ss)错误===》strlen的参数只能是char*且必须是以'\0'结尾的
charq[]="abc";
charp[]="a\n";
sizeof(q),sizeof(p),strlen(q),strlen(p);
结果是4332
第三个例子
charszPath[MAX_PATH]
如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为虚参声明时(voidfun(charszPath[MAX_PATH])),sizeof(szPath)却会是4(指针大小)
子
charszPath[MAX_PATH]
如果在函数内这样定义,那么sizeof(szPath)将会是MAX_PATH,但是将szPath作为虚参声明时(voidfun(charszPath[MAX_PATH])),sizeof(szPath)却会是4(指针大小)
还有一位网友的说明也很好:
其实理解sizeof只需要抓住一个要点:栈
程序存储分布有三个区域:栈、静态和动态。能够从代码直接操作的对象,包括任何类型的变量、指针,都是在栈上的;动态和静态存储区是靠栈上的所有指针间接操作的。sizeof操作符,计算的是对象在栈上的投影体积;记住这个就很多东西都很清楚了。
charconst*static_string="Hello";
sizeof(static_string)是sizeof一个指针,所以在32bitsystem是4
charstack_string[]="Hello";
sizeof(stack_string)是sizeof一个数组,所以是6*sizeof(char)
char*string=newchar[6];
strncpy(string,"Hello",6");
sizeof(string)是sizeof一个指针,所以还是4。和第一个不同的是,这个指针指向了动态存储区而不是静态存储区。
不管指针指向的内容在什么地方,sizeof得到的都是指针的栈大小
C++中对引用的处理比较特殊;sizeof一个引用得到的结果是sizeof一个被引用的对象的大小;所以
structO
{
inta,b,c,d,e,f,g,h;
};
intmain()
{
O&r=*newO;
cout<<sizeof(O)<<endl;//32
cout<<sizeofr<<endl;//也是32
system("PAUSE");
}
r引用的是整个的O对象而不是指向O的指针,所以sizeofr的结果和sizeofO完全相同。
strlen用来求字符串的长度用的
而sizeof是用来求指定变量或者变量类型等所占内存大小用的
比如strlen("nihao")它的结果是5
而sizeof(int)它的结果是2也就是说int型占两个字节
sizeof与strlen的区别:
一、sizeof
sizeof(...)是运算符,在头文件中typedef为unsignedint,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
二、strlen
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。
绛旓細sizeof鍜宻trlen鐨勫尯鍒槸锛鍚箟涓嶅悓銆佸姛鑳戒笉鍚銆1銆佸惈涔変笉鍚 鍦ㄥ畾涔夋椂锛岃鐭ラ亾鍒皊trlen鏄竴涓嚱鏁帮紝瀹冪敤鏉ヨ绠楁寚瀹氬瓧绗︿覆str鐨勯暱搴︼紝浣嗕笉鍖呮嫭缁撴潫瀛楃锛堝嵆null瀛楃锛夈傝宻izeof鏄竴涓崟鐩繍绠楃锛岃屼笉鏄竴涓嚱鏁帮紝瀹冪殑鍙傛暟鍙互鏄暟缁勩佹寚閽堛佺被鍨嬨佸璞°佸嚱鏁扮瓑銆傝繖灏辨槸strlen鍜宻izeof鐨勬渶鏈川鍖哄埆銆2...
绛旓細涓銆佸畾涔変笉鍚 sizeof鏄繍绠楃锛屽湪澶存枃浠朵腑typedef涓簎nsigned int锛屽叾鍊煎湪缂栬瘧鏃跺嵆璁$畻濂戒簡锛屽弬鏁板彲浠ユ槸鏁扮粍銆佹寚閽堛佺被鍨嬨佸璞°佸嚱鏁扮瓑銆2銆佸畠鐨勫姛鑳芥槸锛氳幏寰椾繚璇佽兘瀹圭撼瀹炵幇鎵寤虹珛鐨勬渶澶у璞$殑瀛楄妭澶у皬銆傚叿浣撹岃█锛屽綋鍙傛暟鍒嗗埆濡備笅鏃讹紝sizeof杩斿洖鐨勫艰〃绀虹殑鍚箟濡備笅锛氭暟缁勨斺旂紪璇戞椂鍒嗛厤鐨勬暟缁勭┖闂村ぇ灏忥紱...
绛旓細1銆乻izeof锛氱敤浜庤幏鍙栧瓧绗︿覆鐨勯暱搴︼紝鏄鐞嗗瓧绗︿覆鐨勯噸瑕佸伐鍏枫2銆乻trlen锛氭墍浣滅殑鏄竴涓鏁板櫒鐨勫伐浣銆備簩銆佽鍒欎笉鍚 1銆乻izeof锛氬彲鐢ㄤ簬浠讳綍鍙橀噺鍚嶃佺被鍨嬪悕鎴栧父閲忓硷紝褰撶敤浜庡彉閲忓悕锛堜笉鏄暟缁勫悕锛夋垨甯搁噺鏃讹紝涓嶉渶瑕佺敤鍦嗘嫭鍙枫2銆乻trlen锛氫粠鍐呭瓨鐨勬煇涓綅缃紙鍙互鏄瓧绗︿覆寮澶达紝涓棿鏌愪釜浣嶇疆锛岀敋鑷虫槸鏌愪釜...
绛旓細sizeof鏄竴涓繍绠楃锛岃宻trlen鏄竴涓嚱鏁般俿izeof鐢ㄤ簬璁$畻鏁版嵁绫诲瀷鎴栧彉閲忕殑澶у皬锛岃宻trlen鐢ㄤ簬璁$畻瀛楃涓茬殑闀垮害銆俿izeof鍙互璁$畻绫诲瀷鎴栧彉閲忕殑闀垮害锛岃宻trlen鍙兘鐢ㄤ簬瀛楃涓层傚綋sizeof鐢ㄤ簬绫诲瀷鎴栧彉閲忔椂锛屽畠杩斿洖鐨勬槸璇ョ被鍨嬫垨鍙橀噺鍦ㄥ唴瀛樹腑鍗犵敤鐨勫瓧鑺傛暟銆傚綋sizeof鐢ㄤ簬瀛楃涓叉椂锛屽畠杩斿洖鐨勬槸瀛楃涓蹭腑瀛楃鐨勬暟閲忥紝...
绛旓細sizeof鍜宻trlen鍖哄埆灏辨槸鍚箟涓嶅悓锛岃繍琛岀粨鏋滀笉鍚岀瓑銆俿trlen琛ㄧず鐨勬槸涓涓鏁板櫒鐨勫伐浣滐紝瀹冩槸浠庡唴瀛樼殑鏌愪釜浣嶇疆锛堣繖閲岀殑浣嶇疆鍙互鏄瓧绗︿覆寮澶达紝涓棿鏌愪釜浣嶇疆锛屼篃鍙互鏄煇涓笉纭畾鐨勫唴瀛樺尯鍩燂級寮濮嬫壂鎻忥紝鐒跺悗鐩磋嚦纰板埌绗竴涓瓧绗︿覆缁撴潫绗'\0'涓烘锛岀劧鍚庤繑鍥炶鏁板櫒鍊笺俿izeof鍦–璇█涓紝鏄敤浜庡垽鏂暟鎹被鍨嬫垨鑰...
绛旓細sizeof鍜宻trlen鍦╟璇█鐨勫尯鍒涓嬶細1銆佺被鍨嬩笉鍚岋細sizeof鎿嶄綔绗︾殑缁撴灉绫诲瀷鏄痵ize_t锛屽畠鍦ㄥご鏂囦欢涓璽ypedef涓簎nsigned int绫诲瀷銆傝绫诲瀷淇濊瘉鑳藉绾冲疄鐜版墍寤虹珛鐨勬渶澶у璞$殑瀛楄妭澶у皬銆2銆佹ц川涓嶅悓锛sizeof鏄畻绗︼紝strlen鏄嚱鏁銆3銆佸弬鏁颁笉鍚岋細sizeof鍙互鐢ㄧ被鍨嬪仛鍙傛暟锛宻trlen鍙兘鐢╟har*鍋氬弬鏁帮紝涓斿繀椤绘槸浠''...
绛旓細锛1锛sizeof锛氱敤鏉ヨ幏鍙栧瓧绗︿覆闀垮害鐨勫寮曪紝鏄鐞嗗瓧绗︿覆鐨勯噸瑕佸伐鍏枫傦紙2锛strlen锛氬仛鐨勬槸涓涓鏁板櫒銆2銆佺敤娉曚笂鐨勫尯鍒 锛1锛塻izeof锛歴izeof( type_name ); // sizeof锛坱ype锛; 鍦ㄧ紪璇戞椂鏈夋晥锛岃屼笉鏄湪杩愯鏃舵湁鏁堛傦紙2锛塻trlen锛歟xtern unsigned int strlen(char *s); 杩斿洖s鐨勯暱搴︼紝涓嶅寘鍚粓姝...
绛旓細1. strlen 鏄鍑芥暟锛sizeof 鏄繍绠楃銆2. strlen 娴嬮噺鐨勬槸瀛楃鐨勫疄闄呴暱搴︼紝浠'\0' 缁撴潫銆傝宻izeof 娴嬮噺鐨勬槸瀛楃鐨勫垎閰嶅ぇ灏忋傛瘮濡傦細char str[20] = "hello";printf("strlen: %d\n", strlen(str));printf("sizeof: %d\n", sizeof(str));缁撴灉鏄剧ず涓猴細strlen: 5 sizeof: 20 3.浣嗘槸鍦ㄥ瓙...
绛旓細sizeof涓strlen鐨勫尯鍒細涓銆乻izeof sizeof(...)鏄繍绠楃锛屽湪澶存枃浠朵腑typedef涓簎nsignedint锛屽叾鍊煎湪缂栬瘧鏃跺嵆璁$畻濂戒簡锛屽弬鏁板彲浠ユ槸鏁扮粍銆佹寚閽堛佺被鍨嬨佸璞°佸嚱鏁扮瓑銆傚畠鐨勫姛鑳芥槸锛氳幏寰椾繚璇佽兘瀹圭撼瀹炵幇鎵寤虹珛鐨勬渶澶у璞$殑瀛楄妭澶у皬銆傜敱浜庡湪缂栬瘧鏃惰绠楋紝鍥犳sizeof涓嶈兘鐢ㄦ潵杩斿洖鍔ㄦ佸垎閰嶇殑鍐呭瓨绌洪棿鐨勫ぇ灏忋傚疄闄呬笂...
绛旓細strlen(char*)鍑芥暟姹傜殑鏄瓧绗︿覆鐨勫疄闄呴暱搴︼紝瀹冩眰寰楁柟娉曟槸浠庡紑濮嬪埌閬囧埌绗竴涓'\0',濡傛灉浣犲彧瀹氫箟娌℃湁缁欏畠璧嬪垵鍊硷紝杩欎釜缁撴灉鏄笉瀹氱殑锛屽畠浼氫粠aa棣栧湴鍧涓鐩存壘涓嬪幓锛岀洿鍒伴亣鍒'\0'鍋滄銆傝sizeof()杩斿洖鐨勬槸鍙橀噺澹版槑鍚庢墍鍗犵殑鍐呭瓨鏁帮紝涓嶆槸瀹為檯闀垮害銆2銆佸弬鏁扮被鍨 sizeof鍙互鐢ㄧ被鍨嬪仛鍙傛暟锛宻trlen鍙兘鐢╟har...