为什么这个C代码中malloci+1的参数是



通常一个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);

如果您想分配某种类型的数组,通常会将所需元素的数量乘以该类型的大小,因为malloc采用字节中的数组大小。

然而,char的数组是一种特殊情况;不需要将所需的元素数乘以sizeof(char),因为标准将sizeof(char)定义为始终1,而乘以1将产生另一个操作数。

+ 1是为NUL端接器腾出空间。如果您想要长度为n的字符串,那么您的数组的长度必须为n + 1;用于字符串的n字符的n空间和用于终止符的1空间。

顺便说一下,您不应该强制转换malloc的返回值。它将使您的代码在未来更容易更改。

C字符串以null结尾,请参阅:

  • http://en.wikipedia.org/wiki/Null-terminated_string

例如,"abc"表示为"abc"+NUL。因此,对于长度为i的字符串,您需要分配i + 1。在分配字符时,sizeof(char)为1,因此实际上需要分配1 * (i + 1),但这是相同的。

如果它为字符串分配,则需要足够的内存来容纳字符数+1个额外的空字符,该空字符表示字符串的末尾(\0)

相关内容

  • 没有找到相关文章

最新更新