通常malloc包含sizeof
,但是这个不包含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);
答案 0 :(得分:13)
如果你想分配某种类型的数组,你通常会将你想要的元素数乘以该类型的大小,因为malloc
采用字节中数组的大小
但是,char
数组是一个特例;您不需要将sizeof(char)
所需的元素数乘以,因为标准将sizeof(char)
定义为始终为1
,并乘以1产生另一个操作数。
+ 1
是为NUL
终结者腾出空间。如果您想要一个长度为n
的字符串,则您的数组必须长度为n + 1
;字符串的n
个字符为n
个空格,终结符为1
个空格。
顺便说一句,你不应该转换malloc
的返回值。它将使您的代码在将来更容易更改。
答案 1 :(得分:3)
C字符串以空值终止,请参阅:
E.g。 “abc”表示为“abc”+ NUL。因此,对于长度为i
的字符串,您需要分配i + 1
。当您分配字符时,sizeof(char)为1,因此您实际需要分配1 * (i + 1)
,但这是相同的。
答案 2 :(得分:2)
如果为字符串分配,则需要足够的内存用于字符数+为表示字符串结尾的空字符添加1个额外字符(\ 0)