2012-02-25 51 views
2

一般一個malloc包含sizeof,但是這一個不具有ⅰ+ 1,而不是:爲什麼在這個C代碼中malloc i + 1的參數?

int main() 
{ 
    int i,n; 
    char * buffer; 

    printf ("How long do you want the string? "); 
    scanf ("%d", &i); 

    buffer = (char*) malloc (i+1); 
    if (buffer==NULL) exit (1); 
+1

更不用說,你不應該真的施放'malloc'的返回值。 – 2012-02-25 03:14:52

回答

10

如果你想分配一些類型的數組,通常只需要乘以你想通過元件的數目該類型的大小,因爲malloc字節的數組大小

但是,char的數組是特例;因爲sizeof(char)由標準定義爲總是1,所以您不需要乘以sizeof(char)所需的元素數,並乘以1得到另一個操作數。

+ 1是爲NUL終結者騰出空間。如果你想要一個長度爲n的字符串,你的數組必須長度爲n + 1; n字符串的n字符的空格,以及終止符的1空格。

順便說一下,您不應該投射返回值malloc。它將使您的代碼在將來更易於更改。

+2

我現在明白了,所以char只是1個字節而+1是NULL。非常感謝你! – Coffee 2012-02-25 03:16:10

+0

Byte * packData =(Byte *)calloc(byteLen,sizeof(Byte)); 這段代碼是否需要byteLen + 1? – SenKe 2016-11-09 10:51:49

2

如果其爲一個字符串分配你需要的字符+ 1個額外的空字符表示字符串的結尾數量足夠的內存(\ 0)

3

C字符串是空終止,請參見:

如「abc」表示爲「abc」+ NUL。因此,對於長度爲i的字符串,您需要分配i + 1。當你分配字符時,sizeof(char)是1,所以你實際上需要分配1 * (i + 1),但這是一樣的。

相關問題