C语言中sizeof和strlen函数区别在哪? c语言中strlen 与sizeof有什么区别?

C\u8bed\u8a00\u4e2dsizeof\u4e0estrlen\u7684\u533a\u522b\u662f\u4ec0\u4e48

\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

strlen \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.

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



1、用法不一样

sizeof可以用类型做参数。

strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做参数,比如:

short f();

printf("%d
", sizeof(f()));

输出的结果是sizeof(short),即2。

2、功能不一样

sizeof的功能能是,获得保证,能容纳实现所建立的最大对象的字节大小。

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

3、意思不一样

sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。

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



通俗一点,简单明了一点来讲,二者都可以用来取字符串长度,不同之处在于sizeof取到的字符串长度包括字符串结束标记‘\0’,而strlen得到的长度则不包括‘\0’,而‘\0’在字符串中是不显示的,所以sizeof得到的字符串长度要比strlen得到的字符串长度大1。
纯手打,希望对你有帮助……

什么啊,那最佳答案怎么得来的啊?
那个什么最佳答案的不要误导了LZ才好,
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',而sizeof()函数返回的是变量声明后所占的内存数,不是实际长度,我若通过赋值方法给字符串中某一字符赋值为\0,它的strlen()值变化很大,而sizeof()不变,根本不总是长度大一的关系!!!

sizeof在编译器求解,strlen在运行期求解,这是主要区别
其次strlen只能求C风格字符串长度sizeof()可以求很多类型的大小

  • 鎬ユ眰!璋佺煡閬2006璁$畻鏈轰笂鏈虹瓟妗,
    绛旓細2006骞磋绠楁満绛夌骇鑰冭瘯涓夌骇C璇█涓婃満棰橀檮绛旀鈽嗛鐩1 璇风紪鍐欎竴涓嚱鏁癹sValue(int m,int k,int xx[]),璇ュ嚱鏁扮殑鍔熻兘鏄:灏嗗ぇ浜庢暣鏁癿涓旂揣闈爉鐨刱涓礌鏁板瓨鍏...memset(sell,0,sizeof(sell)); ReadDat(); SortDat(); WriteDat(); } void ReadDat() { FILE *fp; char str[80],ch[11]; int i; fp=fop...
  • 杩欎釜鏄粈涔璇█?
    绛旓細鏄庢樉鐨凜鍟婏紝璇彞鏄妭閫夌殑鍚э紝鐪嬩笉鎳傝鍋氫粈涔堬紝閭e彞灏辨槸閿欑殑锛屼笉鐭ヨ骞插槢锛屾斁鍝釜璇█閮芥槸閿欑殑銆傛病浠涔堣瑷鍙互涓嶅畾涔夊氨榛樿COUT鍜宔nd1鏈夊肩殑銆
  • C璇█涓瀛楃涓叉庢牱杞崲涓篴sc缂栧彿
    绛旓細瀛楃涓茶杞负ascii鐮佸硷紝闇瑕侀愪釜瀛楃杞崲涓篈SCII鐮併傚湪C璇█涓锛岃杈撳嚭瀛楃鐨凙SCII鐮佸硷紝鍙渶瑕佺敤%d鐨勬牸寮忥紝鐢╬rintf鍑芥暟杈撳嚭鍗冲彲銆傚洜涓%d鐨勬牸寮忎笅锛屼細灏嗗瓧绗﹀瀷鍙橀噺杞负鏁村瀷锛屽煎氨鏄疉SCII鐮佸笺傜紪鍐欏嚱鏁板涓嬶細void print_asc(const char *s){ while(*s) printf("%d ",*s++);} ...
  • dec鍦╬ascal涓槸浠涔堟剰鎬
    绛旓細Pascal璇█鍑芥暟闆(鍚獶elphi鎺т欢灞炴) abort 鍑芥暟 寮曡捣鏀惧純鐨勬剰澶栧鐞 abs 鍑芥暟 缁濆鍊煎嚱鏁 addexitproc...sizeof 鍑芥暟 杩斿洖鍙傛暟鎵鍗犵殑瀛楄妭鏁 smallchange 灞炴 鏈灏忔敼鍙樺 sorted 灞炴 鏄惁鍏佽鎺掑簭 sqr 鍑芥暟...strlfmt 鍑芥暟 鏍煎紡鍖栦竴绯诲垪鐨勫弬鏁,鍏剁粨鏋滀腑鍖呭惈鏈夋寚鍚戠洰鏍囩紦鍐插尯鐨勬寚閽 strlicomp 鍑芥暟 浠ユ渶澶ч暱搴...
  • VB璇█涓鐨 璇█涓嫳鏂囧鐓
    绛旓細sizeof 鍑芥暟 杩斿洖鍙傛暟鎵鍗鐨瀛楄妭鏁 smallchange 灞炴 鏈灏忔敼鍙樺 sorted 灞炴 鏄惁鍏佽鎺掑簭 sqr 鍑芥暟 骞虫柟鍑芥暟 sqrt 鍑芥暟 骞虫柟鏍瑰嚱鏁 startmargin 灞炴 ...strlfmt 鍑芥暟 鏍煎紡鍖栦竴绯诲垪鐨勫弬鏁,鍏剁粨鏋滀腑鍖呭惈鏈夋寚鍚戠洰鏍囩紦鍐插尯鐨勬寚閽 strlicomp 鍑芥暟 浠ユ渶澶ч暱搴︽瘮杈冧袱涓瓧绗︿覆(涓嶅尯鍒嗗ぇ灏忓啓) strlower 鍑芥暟 灏嗗瓧绗...
  • c绋嬪簭璁捐绗洓鐗堣碍娴╁己绋嬪簭妗堜緥閲屾渚2 瀛︾敓璇曞嵎缁熻鐨凾XT鍙戣繃鏉鐧惧害...
    绛旓細(15)涓嬪垪DOS鍛戒护涓纭殑鏄 A)REN 銆乁SER銆丄.TXT 銆丅.TXT B)CD 銆 C)TYPE *銆俆XT D)MD 銆 (16)浠ヤ笅閫夐」涓睘浜C璇█鐨鏁版嵁绫诲瀷鏄 A)澶嶆暟鍨婤...{p=(int*)malloc(sizeof(int)); f(p,a); printf(鈥%d 銆乶鈥,*p); } f(int *s,int p[][3])(45)浠ヤ笅绋嬪簭鐨勮緭鍑虹粨鏋滄槸 A)9 B)6 C)...
  • 濡備綍鐢–瀹炵幇3DES绠楁硶..
    绛旓細memset(src16,0,sizeof(src16));scanf("%s",src16);fprintf(stderr,"Please input the Key string(16 hex number):\n");memset(key16,0,sizeof(key16));scanf("%s",key16);memset(dest16,0,sizeof(dest16));Do_DES(src16,key16,dest16,'e');fprintf(stderr,"Result: [%s]\n"...
  • 閭d綅楂樻墜鍛婅瘔涓婸ascal璇█涓璇荤▼搴忛噷鐨勫悇绉嶇鍙峰拰瀛楁瘝(鍗曡瘝)鍚勪唬琛...
    绛旓細sizeof 鍑芥暟 杩斿洖鍙傛暟鎵鍗鐨瀛楄妭鏁 smallchange 灞炴 鏈灏忔敼鍙樺 sorted 灞炴 鏄惁鍏佽鎺掑簭 sqr 鍑芥暟 骞虫柟鍑芥暟 sqrt 鍑芥暟 骞虫柟鏍瑰嚱鏁 startmargin 灞炴 ...strlfmt 鍑芥暟 鏍煎紡鍖栦竴绯诲垪鐨勫弬鏁,鍏剁粨鏋滀腑鍖呭惈鏈夋寚鍚戠洰鏍囩紦鍐插尯鐨勬寚閽 strlicomp 鍑芥暟 浠ユ渶澶ч暱搴︽瘮杈冧袱涓瓧绗︿覆(涓嶅尯鍒嗗ぇ灏忓啓) strlower 鍑芥暟 灏嗗瓧绗...
  • 20鍒嗘眰璋旦寮鐨凜绋嬪簭璁捐鍩虹涔犻
    绛旓細(15)涓嬪垪DOS鍛戒护涓纭殑鏄 A)REN 銆乁SER銆丄.TXT 銆丅.TXT B)CD 銆 C)TYPE *銆俆XT D)MD 銆 (16)浠ヤ笅閫夐」涓睘浜C璇█鐨鏁版嵁绫诲瀷鏄 A)澶嶆暟鍨婤...{p=(int*)malloc(sizeof(int)); f(p,a); printf(鈥%d 銆乶鈥,*p); } f(int *s,int p[][3]) {*s=p[1][1];} (45)浠ヤ笅绋嬪簭鐨勮緭鍑...
  • 扩展阅读:c语言中sizeof的用法 ... sizeof计算长度包括 0吗 ... sizeof int ... 下面关于strlen与sizeof ... sizeof short ... c语言sizeof和strlen区别 ... strlen在c++的头文件 ... sizeof float ... sizeof在c语言中是什么意思 ...

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