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璇█涓strlen()鍑芥暟鍜宻izof()鍑芥暟鍒嗗埆鎬庝箞鐢?鍖哄埆鏄粈涔
    绛旓細sizeof(arr)/sizeof(a)/sizeof(str)閮芥槸鍙互鐨勶紝浣嗘槸鍙兘浣跨敤strlen(str),鑰屼笉鑳絪trlen(arr);2銆佸尯鍒細2.1 sizeof()鏄C璇█涓垽鏂暟鎹被鍨嬫垨鑰呰〃杈惧紡闀垮害绗︼紱涓嶆槸涓涓嚱鏁帮紝瀛楄妭鏁扮殑璁$畻鍦ㄧ▼搴忕紪璇戞椂杩涜锛岃屼笉鏄湪绋嬪簭鎵ц鐨勮繃绋嬩腑鎵嶈绠楀嚭鏉ャ2.2 strlen()姹傚緱鏂规硶鏄粠寮濮嬪埌閬囧埌绗竴涓'\...
  • C璇█涓sizeof涓strlen鐨勫尯鍒槸浠涔
    绛旓細涓銆佹寚浠d笉鍚 1銆sizeof锛氱敤浜庤幏鍙栧瓧绗︿覆鐨勯暱搴︼紝鏄鐞嗗瓧绗︿覆鐨勯噸瑕佸伐鍏枫2銆strlen锛氭墍浣滅殑鏄竴涓鏁板櫒鐨勫伐浣溿備簩銆佽鍒欎笉鍚 1銆乻izeof锛氬彲鐢ㄤ簬浠讳綍鍙橀噺鍚嶃佺被鍨嬪悕鎴栧父閲忓硷紝褰撶敤浜庡彉閲忓悕锛堜笉鏄暟缁勫悕锛夋垨甯搁噺鏃讹紝涓嶉渶瑕佺敤鍦嗘嫭鍙枫2銆乻trlen锛氫粠鍐呭瓨鐨勬煇涓綅缃紙鍙互鏄瓧绗︿覆寮澶达紝涓棿鏌愪釜浣嶇疆...
  • strlen鍜宻izeof鏈変粈涔堝尯鍒?
    绛旓細strlen璁$畻瀛楃涓茬殑鍏蜂綋闀垮害锛宻izeof璁$畻澹版槑鍚庢墍鍗犵殑鍐呭瓨鏁般strlen涓巗izeof鐨勫尯鍒細strlen璁$畻瀛楃涓茬殑鍏蜂綋闀垮害锛堝彧鑳芥槸瀛楃涓诧級锛屼笉鍖呮嫭瀛楃涓茬粨鏉熺銆傝繑鍥炵殑鏄瓧绗︿釜鏁般俿izeof璁$畻澹版槑鍚庢墍鍗犵殑鍐呭瓨鏁帮紙瀛楄妭澶у皬锛夛紝涓嶆槸瀹為檯闀垮害銆俿izeof鏄竴涓彇瀛楄妭杩愮畻绗︼紝鑰宻trlen鏄釜鍑芥暟銆俿izeof鐨勮繑鍥炲=瀛楃涓...
  • c++涓strlen()鍜.size()鏈変粈涔堝尯鍒?鐢ㄦ硶鏈変粈涔堜笉鍚?
    绛旓細strlen() 鏄嚱鏁帮紝娴嬪畾瀛楃涓茬殑闀垮害锛屽瓧绗︿覆鐨勭粨鏉熺鏄 \0 .size() 杩欎釜鍚嶅瓧锛屽ソ鍑犱釜绫婚兘鐢ㄦ潵浣 鎴愬憳鍑芥暟鍚嶏紝涓嶅悓鐨勭被鐨 .size() 鏈夊悇鑷殑瀹氫箟銆傛濡備汉鍚嶅皬鑺憋紝寮犲鏈夊紶瀹剁殑灏忚姳锛屾潕瀹舵湁鏉庡鐨勫皬鑺憋紝姝ゅ皬鑺遍潪閭e皬鑺便.size() 涓鑸祴瀹氬ぇ灏忋備緥濡傚瓧绗︿覆锛歝har str[]="1234abcd\0XYZ";strlen(...
  • sizeof鍜strlen鍦c璇█鐨勫尯鍒
    绛旓細strlen鐨勫姛鑳芥槸杩斿洖瀛楃涓茬殑闀垮害锛岃瀛楃涓插彲鑳芥槸鑷繁瀹氫箟鐨勶紝涔熷彲鑳芥槸鍐呭瓨涓殢鏈虹殑锛岃鍑芥暟瀹為檯瀹屾垚鐨勫姛鑳芥槸浠庝唬琛ㄨ瀛楃涓茬殑绗竴涓湴鍧寮濮嬮亶鍘嗭紝鐩村埌閬囧埌缁撴潫绗ULL銆傝繑鍥炵殑闀垮害澶у皬涓嶅寘鎷琋ULL銆3銆佹剰鎬濅笉鍚 sizeof(...)鏄繍绠楃锛屽湪澶存枃浠朵腑typedef涓簎nsigned int锛屽叾鍊煎湪缂栬瘧鏃跺嵆璁$畻濂戒簡锛屽弬鏁...
  • strlen鍜宻izeof鐢ㄦ硶strlen鍜宻izeof鐨勫尯鍒
    绛旓細1銆sizeof涓巗trlen鐨勫尯鍒細涓銆乻izeofsizeof(...)鏄繍绠楃锛屽湪澶存枃浠朵腑typedef涓簎nsignedint锛屽叾鍊煎湪缂栬瘧鏃跺嵆璁$畻濂戒簡锛屽弬鏁板彲浠ユ槸鏁扮粍銆佹寚閽堛佺被鍨嬨佸璞°佸嚱鏁扮瓑銆2銆佸畠鐨勫姛鑳芥槸锛氳幏寰椾繚璇佽兘瀹圭撼瀹炵幇鎵寤虹珛鐨勬渶澶у璞$殑瀛楄妭澶у皬銆3銆佺敱浜庡湪缂栬瘧鏃惰绠楋紝鍥犳sizeof涓嶈兘鐢ㄦ潵杩斿洖鍔ㄦ佸垎閰嶇殑鍐呭瓨绌洪棿鐨...
  • c璇█,strlen鍜宻izeof
    绛旓細short f();printf("%d\n", sizeof(f()));杈撳嚭鐨勭粨鏋滄槸sizeof(short)锛屽嵆2銆4.鏁扮粍鍋歴izeof鐨勫弬鏁颁笉閫鍖栵紝浼犻掔粰strlen灏遍鍖栦负鎸囬拡浜嗐5.澶ч儴鍒嗙紪璇绋嬪簭 鍦ㄧ紪璇戠殑鏃跺欏氨鎶妔izeof璁$畻杩囦簡 鏄被鍨嬫垨鏄彉閲忕殑闀垮害杩欏氨鏄痵izeof(x)鍙互鐢ㄦ潵瀹氫箟鏁扮粍缁存暟鐨勫師鍥 char str[20]="0123456789";int a...
  • C璇█涓sizeof涓strlen鐨勫尯鍒槸浠涔
    绛旓細1銆佹寚浠d笂鐨勫尯鍒 锛1锛sizeof锛氱敤鏉ヨ幏鍙栧瓧绗︿覆闀垮害鐨勫寮曪紝鏄鐞嗗瓧绗︿覆鐨勯噸瑕佸伐鍏枫傦紙2锛strlen锛氬仛鐨勬槸涓涓鏁板櫒銆2銆佺敤娉曚笂鐨勫尯鍒 锛1锛塻izeof锛歴izeof( type_name ); // sizeof锛坱ype锛; 鍦ㄧ紪璇戞椂鏈夋晥锛岃屼笉鏄湪杩愯鏃舵湁鏁堛傦紙2锛塻trlen锛歟xtern unsigned int strlen(char *s); 杩斿洖s...
  • c璇█鐨size of,strlen浠涔堟剰鎬
    绛旓細sizeof鍑芥暟鏄绠楁暟鎹┖闂寸殑瀛楄妭鏁帮紱strlen鍑芥暟鏄绠楀瓧绗︽暟缁勭殑瀛楃鏁帮紝浠"\0"涓虹粨鏉熷垽鏂紝涓嶅寘鍚粨鏉熷瓧绗'\0'銆備妇渚嬭鏄庡涓嬶細int a;char b[]="abcd";printf("%d", sizeof(a)); // 杈撳嚭鍙橀噺a鎵鍗犵殑鍐呭瓨瀛楄妭鏁帮紝杈撳嚭4printf("%d", sizeof(b)); // 杈撳嚭瀛楃鏁扮粍b鎵鍗犵殑鍐呭瓨瀛楄妭鏁帮紝...
  • c璇█涓strlen 涓巗izeof鏈変粈涔堝尯鍒?
    绛旓細strlen 鏄繑鍥炲瓧绗︿覆鐨勯暱搴︺傝sizeof锛屽嵈鏄敤鏉ュ彇寰楀彉閲忔垨绫诲瀷鎵鍗犵敤鐨勫唴瀛樺ぇ灏忕殑銆傝繖涓猘鏁扮粍鐨勫瓧绗︿覆闀垮害涓4锛堟湯灏剧殑\0鏄笉璁″叆瀛楃涓查暱搴︾殑锛夛紝浣哸鏄10涓崟浣嶇殑char鍨嬶紝瀹冨崰鐢ㄧ殑鍐呭瓨绌洪棿鏄10*sizeof(char)锛屼负10.sizeof 杩斿洖鐨勬暟閲忕殑鍗曚綅鏄疊yte....
  • 扩展阅读:strlen和sizeof例子 ... sizeof和strlen哪个包含 0 ... sizeof和strlen的长度 ... sizeof和strlen区别举例 ... strlen和sizeof哪个算0 ... sizeof函数和strlen ... strlen和sizeof的结果 ... strlen与size的区别 ... sizeof和strlen在c语言的区别 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网