2015-05-30 61 views
-2

我是編程新手。現在我正在學習CJava使用sizeof與char * array []

我有一個數組這樣的 -

char *array = {"zero", "one", "two", "three"}; 

從這個link我可以打印這樣的數組內容 -

printf("%s %s", array[0], array[1]); //zero one 

但我的問題是我怎麼能打印一份引用的長度array[0]array[1]等。我知道我可以做一些這樣的事情 -

printf("%d\n", sizeof("zero"); 

但我可以打印使用array變量本身的大小。

我曾嘗試與像不同的方式 -

printf("%d\n", sizeof(array[0]); //4 
printf("%d\n", sizeof(*array[0]); //1 

但每次我得到錯誤的答案。

謝謝

+1

錯誤答案是? –

+0

可能的[C - SizeOf指針]重複(http://stackoverflow.com/questions/18363037/c-sizeof-pointers) –

+0

順便說一下,聲明'char * array = {};'不聲明數組'char'指針,或者在這種情況下是字符串,它應該是'char * array [] = {「zero」,...}'。 –

回答

1

您需要strlen

printf("%d\n", (int) strlen(array[0])); 
+0

爲什麼投票。這是OP詢問 – user3629249

+0

@ user3629249'array [0]'具有'char'類型的問題的正確答案! –

+0

哦!謝謝我正在尋找這個。可能我的問題很混亂。但你明白我的要求。 –

1
  1. 首先,如果你想聲明的char *char指針數組,字符串字面量,兩件事情是缺少,[]const,因爲你不希望意外修改,所以

    const char *array[] = {"zero", "one", "two", "three"}; 
    

    將是正確的方法。

  2. 原因是nul終止,在

    printf("%zu\n", sizeof(array[0])) 
    

    正確的值是5而不是4因爲"zero"使用5字節"zero\0"代替4,最後一個是nul終止標誌着結束交流字符串。

    如果你的字符串是非常簡單和規則,然後sizeof(array[0]) - 1會給出正確的價值,儘管它不是一個強大的解決方案,因爲它假定該字符串是像"zero"一個簡單的字符串,如果字符串已經內嵌'\0'會失敗字節,如"zero\0one\0"這是一個有效的字符串文字,並且sizeof將給10

    獲得在C字符串的長度正確的方法,是通過字節迭代,直到出現'\0',這是什麼strlen()呢,所以你可以使用strlen()非常carefuly,因爲它可能會失敗很容易,如果你「不小心,也

    printf("%zu\n", strlen("zero\0one\0")); 
    

    將返回4,因爲'\0'的第一occurrance就足夠了函數返回。

    由於相同的原因,printf("%s\n", "zero\0one\0");也會輸出zero

    strlen()最危險的事情是通過非nul終止序列,這會導致不確定的行爲,與字符串文字沒有危險可言,但如果你定義數組和手工填寫的字符,它真的容易忘記添加終止'\0',並不難用strlen()

+0

'sizeof(array [0])'是'sizeof(char *)',與字符串內容無關。 – aschepler

+0

Ooops,我沒有看到該變量被聲明爲'char *'。 –

4

陣列的每個元件的尺寸是相同的,因爲該陣列被聲明爲指針數組

char * array[] = {"zero", "one", "two", "three"}; 
^^^^^^ 

(注意你必須使用記錄陣列[])

這是陣列中的每個元素都有char *類型,並且相應地,在您運行該程序的環境中,其大小等於4。

實際上,您希望獲取數組元素指向的字符串文字的大小。爲此,您可以使用在標頭中聲明的標準C函數strlen<string.h>函數將返回字符串文字中的字符數,直到終止的零字符。

printf("%zu\n", strlen(array[0])); // returns 4 for "zero" 
printf("%zu\n", strlen(array[1])); // returns 3 for "one"