通常一个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);
Run Code Online (Sandbox Code Playgroud)
Set*_*gie 13
如果要分配某种类型的数组,通常会将所需元素的数量乘以该类型malloc的大小,因为以字节为单位获取数组的大小.
但是,char一个特殊情况是阵列; 您不需要乘您想通过元件的数量sizeof(char),因为sizeof(char)由标准定义始终是1,和乘以1产生的其他操作.
的+ 1是使房间的NUL终结者.如果你想要一个长度的字符串n,你的数组必须是长度的n + 1; 字符串字符的n空格n和1终结符的空格.
顺便说一句,你不应该转换返回值malloc.它将使您的代码在将来更容易更改.