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