sizeof 與 strlen 的使用例子

2022-08-05 02:09:17 字數 2112 閱讀 2902

char* s = "0123456789";

sizeof(s); //結果 4 ===》s是指向字串常量的字元指標

sizeof(*s); //結果 1 ===》*s是第乙個字元

strlen(s); //結果 10 ===》有10個字元,strlen是個函式內部實現是用乙個迴圈計算到\0為止之前

strlen(*s); //結果 10 ===》錯誤,輸入為char * str

char s = "0123456789";

sizeof(s); //結果 11 ===》s是陣列,計算到\0位置,因此是10+1

strlen(s); //結果 10 ===》有10個字元,strlen是個函式內部實現是用乙個迴圈計算到\0為止之前

sizeof(*s); //結果 1 ===》*s是第乙個字元

char s[100] = "0123456789";

sizeof(s); //結果是100 ===》s表示在記憶體中的大小 100×1

strlen(s); //結果是10 ===》strlen是個函式內部實現是用乙個迴圈計算到\0為止之前

int s[100] = "0123456789";

sizeof(s); //結果 400 ===》s表示再記憶體中的大小 100×4

strlen(s); //錯誤 ===》strlen的引數只能是char* 且必須是以『\0『結尾的

char q="abc";

char p="a\n";

sizeof(q),sizeof(p),strlen(q),strlen(p);\\結果是 4 3 3 2

char p = ;

char q = ;

sizeof(p); //結果是8 ===》p表示在記憶體中的大小 8×1

strlen(p); //為乙個隨機值,結果與編譯器有關,不同編譯器結果一般不同

sizeof(q); //結果是8 ===》p表示在記憶體中的大小 8×1

strlen(q); //結果為4 ===》存在'\0',遇到'\0'計算停止。

//

struct stu

;stu stu;

printf("%d\n",sizeof(stu)); //結果 12 ===》記憶體補齊

為了cpu訪問的速度最快,c語言在處理資料時經常把結構變數中的成員的大小按照4或8的倍數計算,這就叫資料對齊(data alignment)。  

函式 strlen 返回的是乙個型別為 size_t 的值,從而有可能讓程式導致意想不到的結果

/*判斷一*/

if(strlen(x)>= strlen(y))

/*判斷二*/

if(strlen(x)- strlen(y)>= 0)

從表面上看,上面的兩個判斷表示式完全相等,但實際情況並非如此。其中,判斷表示式一沒什麼問題,程式也能夠完全按照預想的那樣工作;但判斷表示式二的結果就不一樣了,它將永遠是真

原因很簡單,因為函式 strlen 的返回結果是 size_t 型別(即無符號整型),而size_t 型別絕不可能是負的。因此,語句「if(strlen(x)-strlen(y)>=0)」將永遠為兩個size_t 型別相減其結果仍然是size_t 型別。

同樣,就算表示式中同時包含了有符號整數和無符號整數,還是有可能產生意想不到的結果

/*判斷一*/

if(strlen(x)>= 5)

/*判斷二*/

if(strlen(x)- 5>=0)

很顯然,判斷表示式二的結果還是永遠是真,其原因與上面相同。  

為什麼?

c語言中有符號數和無符號數進行運算(包括邏輯運算和算術運算)缺省會將有符號數看成無符號數進行運算,其中算術運算預設返回無符號數,邏輯運算當然是返回0或1

sizeof 與 strlen 的區別

一 示例 eg1 下列 char buffer 256 char pbuffer buffer cout sizeof buffer cout sizeof pbuffer 其執行結果為 eg2 簡單說明 sizeof gives the amount of storage,in bytes,ass...

strlen與sizeof的區別

1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3.sizeof可以用型別做引數,strlen只能用char 做引數,且必須是以 0 結尾的。4....

sizeof與strlen的區別

sizeof 表示式 是c c 關鍵字 不是函式 功能 返回 表示式 結果所佔機器 位元組 的大小。strlen 字串 是c c 標準庫的函式 不是關鍵字 在標頭檔案 string.h 中宣告。功能 計算 字串 中的 0 之前的字元個數。特別注意 strlen總是假定傳給它的引數是以null結束符 ...