strlen和sizeof有什麼區別?
Sizeof與Strlen的區別與聯係(轉)
1.sizeof操作符的結果類型是size_t,它在頭文件中typedef為unsigned int類型。
該類型保證能容納實現所建立的最大對象的字節大小。
2.sizeof是算符,strlen是函數。
3.sizeof可以用類型做參數,strlen隻能用char*做參數,且必須是以''\0''結尾的。
sizeof還可以用函數做參數,比如:
short f();
printf("%d\n", sizeof(f()));
輸出的結果是sizeof(short),即2。
4.數組做sizeof的參數不退化,傳遞給strlen就退化為指針了。
5.大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數組維數的原因
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
6.strlen的結果要在運行的時候才能計算出來,時用來計算字符串的長度,不是類型占內存的大小。
7.sizeof後如果是類型必須加括弧,如果是變量名可以不加括弧。這是因為sizeof是個操作符不是個函數。
8.當適用了於一個結構類型時或變量, sizeof 返回實際的大小,
當適用一靜態地空間數組, sizeof 歸還全部數組的尺寸。
sizeof 操作符不能返回動態地被分派了的數組或外部的數組的尺寸
9.數組作為參數傳給函數時傳的是指針而不是數組,傳遞的是數組的首地址,
如:
fun(char [8])
fun(char [])
都等價於 fun(char *)
在C++裏參數傳遞數組永遠都是傳遞指向數組首元素的指針,編譯器不知道數組的大小
如果想在函數內知道數組的大小, 需要這樣做:
進入函數後用memcpy拷貝出來,長度由另一個形參傳進去
fun(unsiged char *p1, int len)
{
unsigned char* buf = new unsigned char[len+1]
memcpy(buf, p1, len);
}
我們能常在用到 sizeof 和 strlen 的時候,通常是計算字符串數組的長度
看了上麵的詳細解釋,發現兩者的使用還是有區別的,從這個例子可以看得很清楚:
char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 計算字符串的長度,以結束符 0x00 為字符串結束。
int b=sizeof(str); //而b=20; >>>> sizeof 計算的則是分配的數組 str[20] 所占的內存空間的大小,不受裏麵存儲的內容改變。
上麵是對靜態數組處理的結果,如果是對指針,結果就不一樣了
char* ss = "0123456789";
sizeof(ss) 結果 4 ===》ss是指向字符串常量的字符指針,sizeof 獲得的是一個指針的之所占的空間,應該是
長整型的,所以是4
sizeof(*ss) 結果 1 ===》*ss是第一個字符 其實就是獲得了字符串的第一位'0' 所占的內存空間,是char類
型的,占了 1 位
strlen(ss)= 10 >>>> 如果要獲得這個字符串的長度,則一定要使用 strlen
sizeof與strlen的區別
首先要對字符串要了解。字符串最後有個隱藏的字符'\0',標識該字符串結束。
'\n'是換行符號,隻是一個字符而已。
sizeof 計算字符串長度時候會把最後的 '\0' 算進去,而strlen 不會。
所以一般結果就是 sizeof 計算出來的長度 比 strlen的長度要多1個字節。
例如:這個sizeof("hello")=6,而strlen("hello")=5。
但是sizeof 在計算數組的時候,是計算這個數組的最大長度,而不是數組內部數據的長度。
所以問題中的 strlen結果是5,而sizeof結果是10 。'\n'也占一個字節。
除此之外,還要注意,當sizeof後麵帶一個指針的時候,實際上是計算指針的長度,一般32位設備
指針長度是4個字節。而strlen依然是計算指針指向的長度。
例如:
char *a="hello";
sizeof(a)=4 <>
strlen(a)=5 <>
C語言中sizeof與strlen的區別是什麼
sizeof獲得是所占的字節數,所分配的空間的字節數。
strlen獲得是長度(實際字符的個數)。
例如: char a[5]="abc";
sizeof(a) 等於5,因為分配了5個字節的空間。
而strlen(a)等於3,這是其實際字符的個數
c語言中strlen 與sizeof有什麼區別?
strlen 是返回字符串的長度。
而sizeof,卻是用來取得變量或類型所占用的內存大小的。
這個a數組的字符串長度為4(末尾的\0是不計入字符串長度的),但a是10個單位的char型,它占用的內存空間是10*sizeof(char),為10. sizeof 返回的數量的單位是Byte.
c語言中sizeof()和strlen()用法上有什麼區別呢?
*
sizeof是操作符,不是函數。它後麵的()並不是必須的,沒有歧意時就不必寫上了。sizeof操作符計算的是係統為它後麵的變量或類型名分配的空間大小,無論其中是否存儲了有用數據。
*
strlen()是庫函數,()中必須是字符串指針或字符串常量,它返回的是檢測對象中第一個'\0'前的字符個數,不含'\0'。
下麵的代碼可能對此解惑:
//#include?"stdafx.h"//If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
#include?"string.h"
int?main(void){
char?s[50]="1234",p[100]={'f','j','k','d','s','a','l','\0','1','2','3','4','5','\0'};
printf("sizeof(s)?=?%d\n",sizeof?s);//這裏s沒有加(),也正確
printf("strlen(s)?=?%d\nstrlen(p)?=?%d\n",strlen(s),strlen(p));
//上句檢測p時遇到第一個'\0'就結束了
return?0;
}
C++中sizeof和strlen的區別是什麼?
strlen:是C標準庫中的字符串函數,用於統計字符的個數。
sizeof:是c語言中的運算符,確切的說是一個編譯時運算符,用於統計類型或者變量所占的內存字節數。示例,以32位係統為例。
char?*str?=?"hello";
strlen(str);?//它的值是5,因為hello這個字符串有5個字符
sizeof(str);?//它的值是4,因為char?*是一個指針類型,它占4個字節。
sizeof("hello");?//它的值是5,是因為hello有5個字符,每一個字符占1個字節。
int?a[2]?=?{0};
sizeof(a);?//它的值是8,因為a中有2個int型變量,每個int型占4個字節,所以8字節
c語言的size of,strlen什麼意思
sizeof函數是計算數據空間的字節數;
strlen函數是計算字符數組的字符數,以"\0"為結束判斷,不包含結束字符'\0'。
舉例說明如下:
int?a;
char?b[]="abcd";
printf("%d",?sizeof(a));??//?輸出變量a所占的內存字節數,輸出4
printf("%d",?sizeof(b));??//?輸出字符數組b所占的內存字節數,輸出5(5=4+1,1為結束字符所占的內存)
printf("%d",?strlen(b));??//?輸出字符數組b中字符的個數,輸出4(不含結束字符''\0)
c++中strlen()和.size()有什麼區別?用法有什麼不同?
strlen() 是函數,測定字符串的長度,字符串的結束符是 \0
.size() 這個名字,好幾個類都用來作 成員函數名,不同的類的 .size() 有各自的定義。正如人名小花,張家有張家的小花,李家有李家的小花,此小花非那小花。
.size() 一般測定大小。
例如字符串:
char str[]="1234abcd\0XYZ";
strlen(str) 得 8, 不計 結束符 \0 和它以後的 字節。
sizeof(str) 得 12,計入 結束符 \0 和它以後的 字節
.size() 功能 通常 類似 sizeof()。
C語言中,sizeof和strlen都是表示字符串長度的嗎?誰能告訴我它們兩者的區別~~
sizeof 計算的是數據在內存中存放的長度,單位是“字節”,可以對任何數據類型做運算,而且它是一個運算符(和+、-、*、\類似);當對字符串計算時,包含末尾的"\0";當對字符數組操作時,返回的是數組的總的長度,也就是當把數組作為參數傳遞給sizeof時是不會退化的。strlen 計算的是字符串的長度,單位是“字符”,隻能對字符串運算,而且它是函數(不是運算符),計算時,不包含末尾的"\0";當對字符數組操作時,返回的是數組總存放的字符串的實際長度(也就是\0之前的),也就是當把數組作為參數傳遞給strlen時是會退化成char*指針的。例如:char* str = "Hello!";sizeof(str)值為7;strlen(str)值為6;char str[20] = "Hello!";sizeof(str)值為20;strlen(str)值為6;
strlen的區別sizeof
1、區別:
(1)strlen是函數,sizeof是運算符。
(2)strlen是有效字符串的長度,不包含?\0?,與初始化有關係,而sizeof與初不初始化沒有關係
(3)strlen隻能用char*做參數,且必須是以'\0'結尾的,用來計算字符串的長度;sizeof可以用類型做參數,用來計算類型占內存大小。
(4)數組做sizeof的參數不退化,傳遞給strlen就退化為指針了。
(5)strlen的結果在運行時才能計算出來,而sizeof在編譯時計算。
2、相關概念:
(1)strlen是計算機C語言函數,計算字符串s的(unsigned int型)長度,不包括'\0'在內。strlen所作的僅僅是一個計數器的工作,它從內存的某個位置(可以是字符串開頭,中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到碰到第一個字符串結束符'\0'為止,然後返回計數器值。
(2)sizeof是C語言的一種單目操作符,如C語言的++、--等。它並不是函數。sizeof操作符以字節形式給出了其操作數的存儲大小。操作數可以是一個表達式或括在括號內的類型名。操作數的存儲大小由操作數的類型決定。其實可以簡單的理解sizeof是征對"類型"的。
轉載請注明出處句子大全網 » strlen和sizeof有什麼區別