为什么在这个C代码中malloc i + 1的参数?

Cof*_*fee 2 c malloc

通常一个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空格n1终结符的空格.

顺便说一句,你不应该转换返回值malloc.它将使您的代码在将来更容易更改.

  • 我现在明白了,所以char只有1个字节,+1是NULL.非常感谢你! (2认同)