字符串長度 與數組長度

對於定義 char str[] = "abc\000def\n"(注:其中0爲數字零),求字符串str的長度len和數組str的大小size,len和size分別是: (2分)(2)

  1. 12 ,13
  2. 3 ,11
  3. 3 ,9
  4. 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

int data[4];

int length;

length=sizeof(data)/sizeof(data[0]);  //數組佔內存總空間,除以單個元素佔內存空間大小

printf("length of data[4]=%d", length ); //輸出length of data[4]=4

2、但是,通過傳遞數組名參數到子函數中,以獲得數組長度是不可行的。

例如:

1

2

3

4

5

int getLength(int[] a){

    int length;

    length=sizeof(a)/sizeof(a[0]); //這樣是錯誤的,得到的結果永遠是1

    return length;

}

因爲,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'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章