日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sizeof和strlen的区别(其中涉及NUL的讲解)

發布時間:2023/12/2 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sizeof和strlen的区别(其中涉及NUL的讲解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文是自己結合平時所學的知識,對sizeof和strlen的區別進行了總結,如有不對的地方還請批評指證,共同進步!!!

一、從C語言的定義上來講

1、sizeof是關鍵字,而strlen是包含在string.h頭文件中的一個字符串函數

2.sizeof操作符的結果類型是size_t,它在頭文件中的typedef為unsigned int 類型,該類型保證能容納實現所建立的最大對象的字節大小。

而string函數的返回類型是整形,返回的是字符串的起始到第一個‘NUL’的所占字節的個數

3.sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以”\0”結尾的。

4.大部分編譯程序在編譯的時候就把sizeof計算過了(所以sizeof的值是常量,不能出現在表達式的左邊),是類型或是變量的長度,這就是sizeof(x)可以用來定義數組位數的原因。

?

二、從功能上來講?

1.strlen的結果要在運行的時候才能計算出來,用來計算字符串的長度,而不是類型占內存的大小。

2.sizeof后如果是類型必須加括號,如果是變量名可以不加括號。這是因為sizeof是個操作符而不是函數。

?3.當使用一個結構類型或變量時,sizeof返回實際的大小。當使用一靜態的空間數組時,sizeof返回全部數組的尺寸。

Sizeof操作符不能返回被動態分配的數組或外部的數組的尺寸。

4.sizeof操作符不能用于函數類型,不完全類型或位字段。

(不完全類型指具有未知存儲大小數據的數據類型,如未知存儲大小的數組類型,未知內容的結構或聯合類型,void類型等。)

三、從它們的實現上來講(自己推導的,估計是這樣,如有錯誤,請批評指正)

strlen是遇到0退出,注意:0和 '0' 不同(涉及NUL的解釋,請看下面關于的NUL的解釋)

而sizeof則是考慮數組的實際所占的存儲空間,在程序編譯期已被確定下來了

?

易錯點及誤區:

很多人都會有個潛意識:對同一數組操作,strlen的返回值肯定比sizeof的返回值小1,(很顯然,這是錯的,請看下面的例子)具體的解釋看程序分析

?

附源碼:

#include <stdio.h> #include <string.h>int main() {char a[]={'0','1','2',0,'3'};printf("the size is :%d\n",sizeof(a));printf("the size is :%d\n",strlen(a));return 0; }


程序的運行結果:

NUl的定義

C語言中規定以字符‘\0'作為字符串結束標志。’\0'是一個ASCII碼為0的字符,從ASCII碼表中可以看到ASCII碼為0的字符是“空操作字符”,

它不引起任何控制動作,也不是一個可顯示的字符

?

對于程序的分析:

strlen是遇到0(及NUL)退出,上面的程序中strlen函數在遇到0時及數組中第四個元素時即退出了,故而返回的是值3

而sizeof則是考慮數組的實際所占的存儲空間,在編譯器編譯期間已經定下來了,數組的實際的所占的存儲的空間是5個字節,故而程序打印出5

??

轉載于:https://www.cnblogs.com/linuxhan/archive/2012/12/09/3017177.html

總結

以上是生活随笔為你收集整理的sizeof和strlen的区别(其中涉及NUL的讲解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。