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骞磋绠楁満绛夌骇鑰冭瘯涓夌骇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鏈夊肩殑銆
绛旓細瀛楃涓茶杞负ascii鐮佸硷紝闇瑕侀愪釜瀛楃杞崲涓篈SCII鐮併傚湪C璇█涓锛岃杈撳嚭瀛楃鐨凙SCII鐮佸硷紝鍙渶瑕佺敤%d鐨勬牸寮忥紝鐢╬rintf鍑芥暟杈撳嚭鍗冲彲銆傚洜涓%d鐨勬牸寮忎笅锛屼細灏嗗瓧绗﹀瀷鍙橀噺杞负鏁村瀷锛屽煎氨鏄疉SCII鐮佸笺傜紪鍐欏嚱鏁板涓嬶細void print_asc(const char *s){ while(*s) printf("%d ",*s++);} ...
绛旓細Pascal璇█鍑芥暟闆(鍚獶elphi鎺т欢灞炴) abort 鍑芥暟 寮曡捣鏀惧純鐨勬剰澶栧鐞 abs 鍑芥暟 缁濆鍊煎嚱鏁 addexitproc...sizeof 鍑芥暟 杩斿洖鍙傛暟鎵鍗犵殑瀛楄妭鏁 smallchange 灞炴 鏈灏忔敼鍙樺 sorted 灞炴 鏄惁鍏佽鎺掑簭 sqr 鍑芥暟...strlfmt 鍑芥暟 鏍煎紡鍖栦竴绯诲垪鐨勫弬鏁,鍏剁粨鏋滀腑鍖呭惈鏈夋寚鍚戠洰鏍囩紦鍐插尯鐨勬寚閽 strlicomp 鍑芥暟 浠ユ渶澶ч暱搴...
绛旓細sizeof 鍑芥暟 杩斿洖鍙傛暟鎵鍗鐨瀛楄妭鏁 smallchange 灞炴 鏈灏忔敼鍙樺 sorted 灞炴 鏄惁鍏佽鎺掑簭 sqr 鍑芥暟 骞虫柟鍑芥暟 sqrt 鍑芥暟 骞虫柟鏍瑰嚱鏁 startmargin 灞炴 ...strlfmt 鍑芥暟 鏍煎紡鍖栦竴绯诲垪鐨勫弬鏁,鍏剁粨鏋滀腑鍖呭惈鏈夋寚鍚戠洰鏍囩紦鍐插尯鐨勬寚閽 strlicomp 鍑芥暟 浠ユ渶澶ч暱搴︽瘮杈冧袱涓瓧绗︿覆(涓嶅尯鍒嗗ぇ灏忓啓) strlower 鍑芥暟 灏嗗瓧绗...
绛旓細(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)...
绛旓細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"...
绛旓細sizeof 鍑芥暟 杩斿洖鍙傛暟鎵鍗鐨瀛楄妭鏁 smallchange 灞炴 鏈灏忔敼鍙樺 sorted 灞炴 鏄惁鍏佽鎺掑簭 sqr 鍑芥暟 骞虫柟鍑芥暟 sqrt 鍑芥暟 骞虫柟鏍瑰嚱鏁 startmargin 灞炴 ...strlfmt 鍑芥暟 鏍煎紡鍖栦竴绯诲垪鐨勫弬鏁,鍏剁粨鏋滀腑鍖呭惈鏈夋寚鍚戠洰鏍囩紦鍐插尯鐨勬寚閽 strlicomp 鍑芥暟 浠ユ渶澶ч暱搴︽瘮杈冧袱涓瓧绗︿覆(涓嶅尯鍒嗗ぇ灏忓啓) strlower 鍑芥暟 灏嗗瓧绗...
绛旓細(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)浠ヤ笅绋嬪簭鐨勮緭鍑...