strlensizeof
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
sizeof 和 strlen 有以下區(qū)別:
? ?sizeof 是一個(gè)操作符,strlen 是庫(kù)函數(shù)。
? ?sizeof 的參數(shù)可以是數(shù)據(jù)的類型,也可以是變量,而 strlen 只能以結(jié)尾為‘\ 0‘的字符串作參數(shù)。
? ?編譯器在編譯時(shí)就計(jì)算出了 sizeof 的結(jié)果。而 strlen 函數(shù)必須在運(yùn)行時(shí)才能計(jì)算出來(lái)。并且 sizeof
計(jì)算的是數(shù)據(jù)類型占內(nèi)存的大小,而 strlen 計(jì)算的是字符串實(shí)際的長(zhǎng)度。
? ?數(shù)組做 sizeof 的參數(shù)不退化,傳遞給 strlen 就退化為指針了。
?
int _tmain(int argc, _TCHAR* argv[])
{
?
//strlen(char*)函數(shù)求的是字符串的實(shí)際長(zhǎng)度,它求得方法是從開(kāi)始到遇到第一個(gè)'\0',
//?????????? 如果你只定義沒(méi)有給它賦初值,這個(gè)結(jié)果是不定的
//?????????? 它會(huì)從aa首地址一直找下去,直到遇到'\0'停止
//而sizeof()返回的是變量聲明后所占的內(nèi)存數(shù),不是實(shí)際長(zhǎng)度,
//此外sizeof不是函數(shù),僅僅是一個(gè)操作符,strlen是函數(shù)。
??
? char aa[10];
? std::cout << strlen(aa) << endl; //結(jié)果是不定的
?
? char bb[10]={'\0'};?
? std::cout << strlen(bb) << endl; //結(jié)果為0
?
? char cc[10] = "hui";?
? std::cout << strlen(cc) << endl; //結(jié)果為3
?
?char *s="Golden Global View";?
?std::cout << strlen(s) << endl;? // 18
?
? std::cout << sizeof(aa) << endl;????????? // 10
? std::cout << sizeof(bb) << endl;????????? // 10
? std::cout << sizeof(cc) << endl;????????? // 10
? std::cout << sizeof(s)? << endl;?????????? // 4
?//大部分編譯程序 在編譯的時(shí)候就把sizeof計(jì)算過(guò)了 是類型或是變量的長(zhǎng)度? 這就是sizeof(x)可以用來(lái)定義數(shù)組維數(shù)的原因
?char* ee = "0123456789";
?std::cout << sizeof(ee) << endl;? //結(jié)果 4 ===》ee是指向字符串常量的字符指針?
?std::cout << sizeof(*ee) << endl; //結(jié)果 1 ===》*ee是第一個(gè)字符
?
?char str[20]="0123456789";?
?std::cout << strlen(str) << endl;???? //10
?std::cout << sizeof(str) << endl;???? //20
?
?char ff[] = "0123456789";?
?std::cout << sizeof(ff)? << endl; //結(jié)果 11 ===》ff是數(shù)組,計(jì)算到\0位置,因此是10+1
?std::cout << sizeof(*ff) << endl; //結(jié)果 1 ===》*ff是第一個(gè)字符
??
?char gg[100] = "0123456789";
?std::cout << sizeof(gg) << endl;? //結(jié)果是100 ===》gg表示在內(nèi)存中的大小 100×1
?std::cout << strlen(gg) << endl;? //結(jié)果是10 ===》strlen是個(gè)函數(shù),內(nèi)部實(shí)現(xiàn)是用一個(gè)循環(huán)計(jì)算到\0之前為止
?
?int hh[100] = {0,1,2,3,4,5,6,7,8,9};
?std::cout << sizeof(hh) << endl;? //結(jié)果 400 ===》hh表示在內(nèi)存中的大小 100×4
//std::cout << strlen(hh) << endl;? //錯(cuò)誤 ===》strlen的參數(shù)只能是char* 且必須是以'\0'結(jié)尾的
?
?char q[]="abc";?
?char p[]="abc\n";
?std::cout << sizeof(q) << endl;?? // 4
?std::cout << sizeof(p) << endl;?? //?5
?std::cout << strlen(q) << endl;?? // 3
?std::cout << strlen(p) << endl;?? //?4
?
?class X
?? {int i; int j; char k; };
??? X x;
??? cout<<sizeof(X)<<endl; //結(jié)果 12 ===》內(nèi)存補(bǔ)齊
?? ?cout<<sizeof(x)<<endl; //結(jié)果 12 同上
?
? ? cin.get();
}
轉(zhuǎn)載于:https://my.oschina.net/ucliaohh/blog/806156
總結(jié)
以上是生活随笔為你收集整理的strlensizeof的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RHEL账号总结一:账号的分类
- 下一篇: bcrypt对密码加密的一些认识(学习笔