c语言中sizeof()和strlen()用法上有什么区别呢? C语言中sizeof和strlen函数区别在哪?

c\u8bed\u8a00\u4e2dstrlen \u4e0esizeof\u6709\u4ec0\u4e48\u533a\u522b\uff1f

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\u3001\u64cd\u4f5c
strlen(char*)\u51fd\u6570\u6c42\u7684\u662f\u5b57\u7b26\u4e32\u7684\u5b9e\u9645\u957f\u5ea6\uff0c\u5b83\u6c42\u5f97\u65b9\u6cd5\u662f\u4ece\u5f00\u59cb\u5230\u9047\u5230\u7b2c\u4e00\u4e2a'\0',\u5982\u679c\u4f60\u53ea\u5b9a\u4e49\u6ca1\u6709\u7ed9\u5b83\u8d4b\u521d\u503c\uff0c\u8fd9\u4e2a\u7ed3\u679c\u662f\u4e0d\u5b9a\u7684\uff0c\u5b83\u4f1a\u4eceaa\u9996\u5730\u5740\u4e00\u76f4\u627e\u4e0b\u53bb\uff0c\u76f4\u5230\u9047\u5230'\0'\u505c\u6b62\u3002
\u800csizeof()\u8fd4\u56de\u7684\u662f\u53d8\u91cf\u58f0\u660e\u540e\u6240\u5360\u7684\u5185\u5b58\u6570\uff0c\u4e0d\u662f\u5b9e\u9645\u957f\u5ea6\u3002
2\u3001\u53c2\u6570\u7c7b\u578b
sizeof\u53ef\u4ee5\u7528\u7c7b\u578b\u505a\u53c2\u6570\uff0cstrlen\u53ea\u80fd\u7528char*\u505a\u53c2\u6570\uff0c\u4e14\u5fc5\u987b\u662f\u4ee5''\0''\u7ed3\u5c3e\u7684\u3002
3\u3001\u7c7b\u578b
sizeof\u662f\u64cd\u4f5c\u7b26\uff08\u5173\u952e\u5b57\uff09\uff0cstrlen\u662f\u51fd\u6570\u3002

\u6269\u5c55\u8d44\u6599
strlen\u51fd\u6570\u539f\u578b\uff1a
size_t strlen(const char *string)
size_t \u662f\u65e0\u7b26\u53f7\u6574\u6570\u7684\u522b\u540d\uff0c\u5728vs2008\u7f16\u8bd1\u5668\u4e2d\u53ef\u4ee5\u67e5\u770b\u5176\u5b8f\u5b9a\u4e49\u3002
\u529f\u80fd\uff1a
\u5176\u529f\u80fd\u662f\u83b7\u53d6\u5b57\u7b26\u4e32\u7684\u957f\u5ea6\u3002
\u8fd4\u56de\u503c\uff1a
\u5728MSDN\u6587\u6863\u4e2d\u67e5\u770bstrlen\u51fd\u6570\u7684\u8fd4\u56de\u503c\uff0c\u53d9\u8ff0\u5982\u4e0b\u3002
Each of these functions returns the number of characters in string, excluding the terminal NULL. No return value is reserved to indicate an error.
\u6bcf\u4e2a\u51fd\u6570\u90fd\u8fd4\u56de\u5b57\u7b26\u4e32\u4e2d\u7684\u5b57\u7b26\u6570\uff0c\u4e0d\u5305\u62ec\u7ec8\u7aefNULL\u3002\u4e0d\u4fdd\u7559\u8fd4\u56de\u503c\u4ee5\u6307\u793a\u9519\u8bef\u3002
\u53c2\u6570\uff1a
Null-terminated string
\u7a7a\u7ec8\u6b62\u5b57\u7b26\u4e32\uff0c \u5b57\u7b26\u4e32\u6807\u51c6\u5e93\u63d0\u4f9b\u7684\u5934\u6587\u4ef6\u4e2d\u5305\u542b\u64cd\u4f5c\u4ee5\u7a7a\u5b57\u7b26\u7ed3\u5c3e\u7684\u5b57\u7b26\u4e32(null-terminated string)\u7684\u51fd\u6570\u3002
\u53c2\u8003\u8d44\u6599\uff1a\u767e\u5ea6\u767e\u79d1\u2014\u2014strlen

  1. sizeof是操作符,不是函数。它后面的()并不是必须的,没有歧意时就不必写上了。sizeof操作符计算的是系统为它后面的变量或类型名分配的空间大小,无论其中是否存储了有用数据。

  2. strlen()是库函数,()中必须是字符串指针或字符串常量,它返回的是检测对象中第一个'\0'前的字符个数,不含'\0'。

下面的代码可能对此解惑:

//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
int main(void){
    char s[50]="1234",p[100]={'f','j','k','d','s','a','l','\0','1','2','3','4','5','\0'};
    printf("sizeof(s) = %d
",sizeof s);//这里s没有加(),也正确
    printf("strlen(s) = %d
strlen(p) = %d
",strlen(s),strlen(p));
            //上句检测p时遇到第一个'\0'就结束了
    return 0;
}


sizeof是关键字不是函数,用来求对象或类型所占的字节数,
而strlen只是用来求字符串长度的。
比如
sizeof int(也可以是sizeof(int))用来求int所占字节数,不能用strlen求。
int a[10]; sizeof(a) 求数组a所占字节数
char s[10] = "Hello";则strlen求得的是5,sizeof是10

sizeof获取的是内存大小,strlen得到的是字符串内容长度。这个是本质区别。
比如 char a[10]={"1234"} sizeof(a)的返回值为10 ,而strlen(a) 的返回值则为4.

两者都是返回字节数,
具体讲前者返回的是字节数,而后者返回的是字符数;
其次,sizeof返回的数量包括最后的结束符'\0',而strlen则没有。

strlen
是返回字符串的长度。
而sizeof,却是用来取得变量或类型所占用的内存大小的。
这个a数组的字符串长度为4(末尾的\0是不计入字符串长度的),但a是10个单位的char型,它占用的内存空间是10*sizeof(char),为10.
sizeof
返回的数量的单位是Byte.

  • sizeof鐨鎰忔濇槸浠涔?
    绛旓細SIZE銆ST鍊间负1鑰屼笉鏄7锛屾姹傚瓧绗︿覆闀垮彲鐢–OUNT銆EQU銆锛-ST锛屽垯COUNT鍊间负7锛屽叾涓紕涓哄畾涔塖T涓涓插瓧绗﹀悗涓嬩竴涓彲鐢ㄧ殑鍋忕Щ鍦板潃銆
  • 鎴戞湁閬C璇█棰樼洰~ 鏈夊叴瓒h鍋氬仛~~
    绛旓細sizeof()鍑芥暟鐢ㄦ潵缁熻鍙傛暟鎵鍗犵殑鍐呭瓨绌洪棿锛屽嵆瀛楄妭鏁般傚洜涓烘暟缁剆t[20]鏄瓧绗﹀瀷鐨勶紝姣忎竴涓暟缁勫厓绱犲崰鎹竴涓瓧鑺傦紝鏁扮粍鍏20涓厓绱犮傛墍浠izeof(st)鐨鍊兼槸20銆傜紪璇戜笉杩囩殑鍘熷洜鏈変袱涓細1銆佸鍓嶆墍杩皊trlen鍑芥暟璋冪敤搴旇鍖呭惈澶存枃浠<string.h> 鎵浠ュ簲璇ユ坊鍔#include<string.h> 2銆乸rintf(%d %d \n鈥,strlen...
  • C璇█棰樿繖浠f浛鎬庝箞鍋氬晩,姹傝В鏋?
    绛旓細濡傛灉struct涓潪鏁扮粍鎴愬憳鏈澶т负4瀛楄妭锛屾寜4瀛楄妭瀵归綈锛屽嵆鍏跺ぇ灏忎负4鐨鏁存暟鍊嶏紱濡傛灉struct涓潪鏁扮粍鎴愬憳鏈澶т负8瀛楄妭锛屾寜8瀛楄妭瀵归綈锛屽嵆鍏跺ぇ灏忎负8鐨勬暣鏁板嶃傜敱涓婂彲鐭ワ紝sizeof(struct st) = sizeof(a) + sizeof(union un) = 16 + 8 = 24锛岃繖鏄洜涓鸿櫧鐒秙izeof(a)=10锛屼絾鍦╯truct st涓鎸8瀛楄妭瀵归綈...
  • c璇█鐨闂sizeof(struce st
    绛旓細printf("ex size: %d\n" , sizeof(struce st ));} 浣犺杩欎釜鐪嬩笉鏄庣櫧鏄惂锛屽畾涔変袱涓彉閲忥紝name鏁扮粍涓哄瓧绗﹀瀷锛宻core涓哄弻绮惧害绫诲瀷锛岃繖涓や釜鍙橀噺閮戒负缁撴瀯绫诲瀷銆俿truct st ex锛涘畾涔塻t ,ex 涓虹粨鏋勭被鍨嬪彉閲忋俿izeof(struce st 锛sizeof()鏄竴涓眰闀垮害鐨鍑芥暟銆傝寰楄繖涔堟竻妤氳鏄庣櫧浜嗕竴鐐逛笉锛熻嚜宸插ソ...
  • st[20]="hello\0\t\\\" ;sizeof(st);
    绛旓細鍦ㄥ睆骞曚笂鎵撳嵃20锛屼綘鎵撳嵃鐨勬槸st鐨勫ぇ灏忥紝st澹版槑鐨勬槸涓涓20涓厓绱犵殑char鏁扮粍锛屽ぇ灏忓氨鏄20涓瓧鑺傘傛墍浠ヤ笉绠t閲岄潰瀛樼殑鏄粈涔堬紝鎵撳嵃鍑烘潵鐨勯兘鏄20."hello\0\t\\\"澶у皬涓鍏辨槸10瀛楄妭锛宧ello涓5瀛楄妭锛孿0銆乗t銆乗\銆乗\鍚勪竴涓瓧鑺傦紝鍐嶅姞涓婁竴涓瓧绗︿覆缁撴潫绗︼紝鍏10瀛楄妭銆
  • C璇█鑱斿悎浣撳拰缁撴瀯浣撲腑鍙橀噺鎵鍗犲唴瀛
    绛旓細union U涓や釜鎴愬憳鍙橀噺锛屼竴涓瓧绗︽暟缁st鍗4涓瓧鑺傦紝涓涓暣鍨媔鍗4涓瓧鑺傦紝鎵浠ヤ袱鑰呭叡鐢4涓瓧鑺傦紝union U鍗4瀛楄妭銆俿truct A涓や釜鎴愬憳鍙橀噺锛屼竴涓暣鍨c鍗4涓瓧鑺傦紝涓涓猽nion U绫诲瀷鐨剈锛屼篃鍗4涓瓧鑺傘傛墍浠truct A鐨勫ぇ灏忎负涓よ呬箣鍜岋紝4+4=8瀛楄妭銆傛敞锛屽洜涓鸿繖浜涙垚鍛樺彉閲忛兘鏄4瀛楄妭澶у皬锛屾墍浠ヤ笉鐢ㄨ冭檻瀛楄妭...
  • ...printf("%d\n", sizeof(st)); 鏁扮粍st鐨闀垮害
    绛旓細sizeof(st)璁$畻鐨鏄痵t瀹為檯鍗犵敤鐨勫瓧绗︽暟锛屼笉鏄瓧绗︿覆鐨勯暱搴︼紝鍥犳鏄12 鍥犱负瀛楃涓 "hello\0\t\nabc"涓鍏辨湁12涓瓧绗 st[]涓殑鍊硷細hello = 5 \0=1涓瓧绗 \t=1涓瓧绗 \n=1涓瓧绗 abc=3涓瓧绗 鏈鍚庝竴涓瓧绗︿覆缁撴潫瀛楃NULL(0) =1涓瓧绗 ...
  • 鍒ゅ畾涓涓爤ST(鏈澶氬厓绱犱负n0)涓烘爤婊鐨鏉′欢鏄粈涔
    绛旓細鍒ゅ畾涓涓爤ST(鏈搴曞厓绱犱负m0)涓烘弧鐨勬潯浠舵槸ST-锛瀟op==m0銆俰nt top[4] = {0};//姝ゆ椂鏍堢┖锛屾棤鏁版嵁 memset(top,1,sizeof(int)*4);//姝ゆ椂鏍堟弧锛屾棤绌洪棿 memset(top,0,sizeof(int)*4);top[0] = 1;//姝ゆ椂锛屾爤鏈弧锛屾湁鏁版嵁锛屼絾涔熸湁绌洪棿銆
  • C璇█ 缁撴瀯浣撴暟缁勭殑涓暟濡備綍鑷繁瀹氫箟?
    绛旓細C99鏍囧噯鍑烘潵浠ュ墠锛C璇█涓嶆敮鎸佸姩鎬佸畾涔夋暟缁勫ぇ灏忥紝鍙兘閲囩敤鍔ㄦ佸垎閰嶆寚閽堟柟寮忔潵瀹屾垚鍔ㄦ佹暟缁勭殑涓暟瀹氫箟銆傚锛歴truct st { int x,y; char str[10];};struct st *array ;int n;printf("input n: "); scanf("%d", &n);array=(struct st*)malloc(n*sizeof(struct st)); //鍔ㄦ佸垎閰峮涓...
  • C++ 鍏充簬size()鍜宻izeof()
    绛旓細1銆乻ize()鍑芥暟锛歝++涓紝鍦ㄨ幏鍙栧瓧绗︿覆闀垮害鏃讹紝size()鍑芥暟涓巐ength()鍑芥暟浣滅敤鐩稿悓銆 闄ゆ涔嬪锛宻ize()鍑芥暟杩樺彲浠ヨ幏鍙杤ector绫诲瀷鐨闀垮害銆備緥濡傦細vector < int> num(15,2) 锛屽垯锛歯um.size() = 15銆2銆sizeof()锛歴izeof()杩愮畻绗︾敤鏉ユ眰瀵硅薄鎵鍗犲唴瀛樼┖闂寸殑澶у皬銆傚亣璁句互涓嬪璞★紝鍒嗗埆浣跨敤sizeof鍑芥暟锛氭墽...
  • 扩展阅读:sizeof double ... c语言struct结构体数组 ... strlen和sizeof的区别 ... \t在c语言中怎么用 ... c语言必背100代码 ... sizeof和strlen的长度 ... c语言中sizeof的用法 ... strlen和sizeof哪个算0 ... sizeof int 的结果为 ...

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