sizeof 與 strlen 的區別
sizeof與strlen的區別
1:本質區別
sizeof:屬於操作符一類結果型別為size_t ,sizeof操作符的結果型別是size_t。該操作符遞的引數可以是變數名,也可以是變數的型別。
例子:
int a;
sizeof(a) == sizeof(int)
sizeof(a) == sizeof a ====> 應為我們說過他是一個操作符,而不是函式沒有引數一說.
strlen:是一個標準庫
原型:size_t strlen ( const char * str );
引數:是一個char型別的指標
返回值:是引數指標指向的字串的的長度以'\0'為結束符
參考連結:http://www.cplusplus.com/reference/cstring/strlen/?kw=strlen
例子:
/* strlen example */
#include <stdio.h>
#include <string.h>
int main ()
{
char szInput[256];
printf ("Enter a sentence: ");
gets (szInput);
printf ("The sentence entered is %u characters long.\n",(unsigned)strlen(szInput));
return 0;
}
2:用法的區別
注:陣列做sizeof的引數不退化,傳遞給strlen就退化為指標
1. 程式在編譯的時候就把sizeof計算過了,是型別或是變數的長度。所以sizeof(xxx)可以用來定義陣列的大小。
char str[20]=”sizeof and strlen”;
int a=strlen(satr); //a=10;
int b=sizeof(str); //b=20;
2. strlen的結果要在執行的時候才能計算出來,用來計算字串的長度以’\0’未結束符,而不是佔用記憶體的大小。
3. sizeof後如果是型別必須加括號,如果是變數名可以不加括號。這是因為sizeof是個操作符而不是函式。
4. 當使用一個結構型別或變數時,sizeof返回實際的大小(該結構型別定義變數後,變數佔用的記憶體大小)。當使用一靜態的空間陣列時(int test[10]),sizeof返回全部陣列的尺寸(該陣列佔用的記憶體空間:4 * 10)。Sizeof操作符不能返回被動態分配的空間大小,外部的陣列的尺寸。
5. 陣列作為引數傳給函式時傳得是指標而不是陣列,傳遞的是陣列的首地址。在C++裡傳遞陣列永遠都是傳遞指向陣列首元素的指標,編譯器不知道陣列的大小,如果想在函式內知道陣列的大小需要在函式裡面用memcpy將陣列複製出來,長度則需要另一個引數。
6. 計算結構變數的大小就必須討論資料對其問題。
7. .sizeof操作符不能用於函式型別,不完全型別或位欄位。不完全型別指具有未知儲存大小資料的資料型別,如未知儲存大小的陣列型別,未知內容的結構或聯合型別,void型別等.
8. sizeof在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、結構或陣列所佔的空間,返回值跟物件、結構、陣列所儲存的內容沒有關係。具體而言,當引數分別如下時,sizeof返回的值表示的含義如下:
陣列——編譯時分配的陣列空間大小;
指標——儲存該指標所用的空間大小(儲存該指標的地址的長度,是長整型,應該為4);
型別——該型別所佔的空間大小;
物件——物件的實際佔用空間大小;
函式——函式的返回型別所佔的空間大小。函式的返回型別不能是void。
9. strlen要在執行時才能計算。引數必須是字元型指標(char*)。當陣列名作為引數傳入時,實際上陣列就退化成指標了。 它的功能是:返回字串的長度。該字串可能是自己定義的,也可能是記憶體中隨機的,該函式實際完成的功能是從代表該字串的第一個地址開始遍歷,直到遇到結束符NULL。返回的長度大小不包括NULL。
相關文章
- sizeof與strlen的區別
- strlen與sizeof的區別
- C語言中的strlen與sizeof的區別C語言
- C/C++——sizeof和strlen的區別C++
- 求陣列長度的兩種方法,以及區別(strlen sizeof)陣列
- sizeof和strlen計算陣列型別和指標型別字串陣列型別指標字串
- c語言陣列、sizeof()及strlen()C語言陣列
- 《細說PHP》中strlen和mb_strlen的區別PHP
- 細說PHP中strlen和mb_strlen的區別PHP
- C語言中,當計算字元陣列長度時,用sizeof 和strlen 的原理及兩者的區別C語言字元陣列
- 整型字元常量和字元字面量的區別 sizeof(char) 和 sizeof('a')字元
- sizeof 和 strlen 計算陣列大小和長度詳解陣列
- 65.C指標---sizeof()函式和strlen()函式常見考指標函式
- ??與?:的區別
- MySQL的@與@@區別MySql
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- &與&&, |與||區別
- in與exist , not in與not exist 的區別
- CentOS 與 Ubuntu 的區別CentOSUbuntu
- artice與section的區別
- GET 與 POST 的區別
- WebSocket 與 Socket 的區別Web
- Postgresql與MySQL的區別MySql
- chown與chmod的區別
- LESS與SASS的區別
- free 與 CFRelease 的區別
- gulp與webpack的區別Web
- @Autowired 與@Resource的區別
- let與var的區別
- post與get的區別
- HashSet與HashMap的區別HashMap
- maven與ant的區別Maven
- __new()__ 與 __init()__的區別
- TCP與UDP的區別TCPUDP
- Mysql與mongodb的區別MySqlMongoDB
- typedef與define的區別
- Eureka與Zookeeper的區別