1. 程式人生 > >sizeof 與 strlen的區別

sizeof 與 strlen的區別

1.sizeof

1.1 當使用了一個結果型別或變數時,sizeof 返回實際的大小。當使用一靜態的空間資料時,sizeof返回全部陣列的尺寸。

sizeof操作符不能返回被動態分配的資料或外部的陣列的尺寸

1.2 大部分編譯程式在編譯的時候就把sizeof 計算過了,是型別或則變數的長度,所以sizeof(x)可以定義陣列的維數
char str[20];
int b=sizeof(str);
int a[b];

2.strlen

2.1. strlen的引數只能是 char *,且必須是以’\0‘結尾的

2.2. strlen的結果要在執行的時候才能計算出來,用來計算字串的長度,而不是型別佔記憶體的大小

例子:

char *q3 ="a\n";
sizeof(q3)為4,指標的大小就是一個定值,就是4
strlen(q3) 為2

char ss1[]= "0123"
sizof(ss1) 為5,因為包含‘\0‘
strlen(ss1) 為4

char ss2[]={'6','0','2','3'};
sizof(ss2) 為4
strlen(ss2) 為4

char ss3[100]="0123";
sizeof(ss3) 為100
strlen(ss3) 結果為4,它的內部是一個迴圈計算字串的長度,直到’\0‘為止

int ss4[100];
sizeof(ss4) 為400,因為int佔4個位元組
strlen(ss4) 錯誤,strlen的引數只能是 char *,且必須是以’\0‘ 結尾的

char str[20];
strlen(str) 得到的值錯誤,因為要 strlen 要以’\0‘結尾
char str[2]="23";
strlen(str) 得到的值錯誤,因為要 strlen 要以’\0‘結尾,這裡陣列定義太小了

sizeof 計算棧中分配的大小,其他區域是不會計算在內的
class A
{
    public:
    int a;
    static int b;
}
sizeof(A1) 為4, 因為靜態變數存放在全域性資料區

相關推薦

C語言中sizeofstrlen區別

由於 def sizeof 繼續 數組 color 例如 結束 自動添加 sizeof 初始的分配的空間大小,期中 sizeof(unsigned char) = 1; sizeof(signed char) = 1;        sizeof(int) = 4; siz

字串處理中sizeofstrlen區別,以及末尾的\0

char *ch = "wonima aisaoziaaa"; int n = sizeof(ch); // 指標長度,對於64平臺來說,值為8 int nn = sizeof(*ch); // 一個字元的長度,值為1 int nnn = strlen(ch); //

sizeofstrlen區別及用法

1、sizeof的定義--本身是操作符不是函式         1.1、你可以把操作符理解為內建的,最基礎的函式,它們無法完全被若干個未使用同類型操作符的函式所替代。比如加法運算子,你就不可能寫出一個不用+或-的函式來實現任何情況下的加法功能。         1.2、運

sizeof strlen區別

由於在專案中,經常需要判別變數、陣列、字串等位元組長度,常常會用到sizeof 和 strlen, 有時候經常會弄混,故整理一下。   1. sizeof : sizeof 運算子 返回一條表示式或一個型別名字所佔的位元組數。與眾不同的一點是,sizeof 並不實際計算其執行物件的值。

SizeofStrlen區別聯絡

一、sizeof     sizeof(...)是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。     它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。     由於在編譯時計算,

sizeofstrlen區別

一、基本定義1、sizeof是C/C++中的一個運算子,其作用是返回一個物件或者型別在記憶體中所佔用的位元組數。    注意:sizeof後面如果是型別則必須加括號,如 sizeof(char);而如果是變數名則可以不加括號,如 sizeof a; 但是建議使用時  均加上括

iOS 筆試題 SizeofStrlen區別聯絡

一、sizeof     sizeof(...)是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。     它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。     由於在編譯時計算,因此sizeof不能用來返回動態

sizeof()strlen()的區別

sizeof()用於檢視變數所佔的空間。例如: sizeof(int) // 4 sizeof(float)// 4 sizeof(double)//8 sizeof(char) //1 char * p = new char[20];sizeof(p)//這裡是p指標所佔的

【PHP】SizeofStrlen區別聯…

9.陣列作為引數傳給函式時傳的是指標而不是陣列,傳遞的是陣列的首地址, 如: fun(char [8]) fun(char []) 都等價於 fun(char *) 在C++裡引數傳遞陣列永遠都是傳遞指向陣列首元素的指標,編譯器不知道陣列的大小 如果想在函式內知道陣列的大小, 需要這樣做: 進入函式後用me

sizeof詳解,strlen區別

題綱: 一:定義 二:用法 三:常量性 四:各型別的sizeof 1 基本資料型別的sizeof 2 指標變數sizeof 3 陣列的sizeof 4 結構體的sizeof 5 聯合的sizeof 6 列舉的sizeof 7 類的sizeof 五:與strlen的區別

【linux c】sizeofstrlen區別簡述_學習筆記_008

通過一個簡單的程式來了解sizeof和strlen的用法,以及和二者的區別。#include <stdio.h> #include <string.h> void size(

sizeof strlen區別

1.sizeof 1.1 當使用了一個結果型別或變數時,sizeof 返回實際的大小。當使用一靜態的空間資料時,sizeof返回全部陣列的尺寸。 sizeof操作符不能返回被動態分配的資料或外部的陣列的尺寸 1.2 大部分編譯程式在編譯的時候就把sizeof 計算過了,是型

sizeofstrlen的用法區別

在進入正題之前,我們來先看一段程式碼 #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { char a[10]; pri

面試常見題之sizeofstrlen區別

     前段時間一直在忙論文和專利的事情,沒時間去看一些c++/資料結構等筆試面試要用的知識,雖說做科研一直用的是c語言,但是平時用的哪些知識太狹隘了,主要集中在一些聚類演算法上面,並沒有多少時間去探討一些c++/c底層的一些東西,現在馬上要找工作了,著手看了一些東西,現

C語言中sizeofstrlen區別

字符指針 系統 32位 大小 添加 std 指針 為什麽 一行 sizeof與strlen是有著本質的區別,sizeof是求數據類型所占的空間大小,而strlen是求字符串的長度,字符串以/0結尾。總的來說sizeof把‘\0‘也給數上了,而strlen遇到‘\0‘就停止計

sizeofstrlen.md

**sizeof與strlen的區別: ** 下面以程式碼的形式來解釋 #include <iostream> using namespace std; int main() { cout << sizeof(int) <<

sizeofstrlen用法詳解(結構體對齊)

#include<stdio.h> int main(int argc,char **argv) { unsigned char a[10] ={1,2,1,2,3,4}; unsigned char a1[10] ={0,0,0,0,0,0}; char *

sizeofstrlen區別以及使用情況分析

實際做開發專案中,如果有涉及到字元資料處理等情況,都會遇到資料長度的獲取。比如現在需要對a[50]陣列進行賦值1~50的指定資料,程式碼如下: char a[50]; for(i = 0 ; i <50 ; i++) { a[i]=i+1; }

sizeof( )strlen( )測陣列的差異分析

2、對兩個陣列a和b進行如下初始化 char a[]=“ABCDEF”; char b[]={ ‘A’,’B’,’C’,’D’,’E’,’F’}; 陣列長度如何判斷? #include<stdio.h> #include<st

sizeofstrlen()區別及用法

//sizeof是以位元組為單位計算變數或型別所佔記憶體大小,它是屬於C語言運算子系列;而strlen()是一個函式,是計算字串長度(也是以位元組為單位,但略有區別);比如: char array[] = {"ILOVE"}; printf("%d", strlen(array)); //值為5