2012-02-25 127 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),但这是一样的。

相关问题