對於定義 char str[] = "abc\000def\n"
(注:其中0爲數字零),求字符串str的長度len和數組str的大小size,len和size分別是: (2分)(2)
- 12 ,13
- 3 ,11
- 3 ,9
- 3 ,4
1.數組長度的計算:整形數組大小:sizeof(數組名)/sizeof(數組類型)。 字符數組大小:strlen(數組名)+1,1因爲要加上'/0',所以 再加1.
2.字符串長度的計算:
字符串長度是指字符串所含的字符個數,但不包括最後的'\0'。sizeof(str)
C語言的字符串是由字符數組形式保存的,並約定'\0'(ascii碼值爲0)作爲字符串結束符。其長度爲從字符串開始,到'\0'結束,所有字符的個數,不包括'\0'本身。
"abcd\n" -------長度應該爲5(\n轉義符) ,轉義字符也算一個字符的。
1、c語言中,定義數組後可以用sizeof命令獲得數組的長度(可容納元素個數)。例如:
1 2 3 4 |
|
2、但是,通過傳遞數組名參數到子函數中,以獲得數組長度是不可行的。
例如:
1 2 3 4 5 |
|
因爲,a是函數參數,到了本函數中,a只是一個指針(地址,系統在本函數運行時,是不知道a所表示的地址有多大的數據存儲空間,這裏只是告訴函數:一個數據存儲空間首地址),所以,sizoef(a)的結果是指針變量a佔內存的大小,一般在32位機上是4個字節。a[0]是int類型,sizeof(a[0])也是4個字節,所以,結果永遠是1。3、因此,獲得數組長度,只能在數組定義所在的代碼區中,採用以上方法,纔可以達到效果。
* strlen用來求字符串的長度用的
而sizeof是用來求指定變量或者變量類型等所佔內存大小用的(需要加上'\0'的位置)
比如strlen("nihao")它的結果是5
而sizeof(int)它的結果是2也就是說int型佔兩個字節
#include<stdio.h>
#include<string.h>
int main(){
int m,n;
m=sizeof("abc\000def\n");
n=strlen("abc\000def\n");
printf("%d %d",m,n);
}
運行結果是9 3 (注:\000和\00和\0所佔的內存是一樣的(疑問)
只有計算字符長度時不許考慮'\0'