使用带有整数的itoa。设置缓冲区的限制

时间:2017-09-20 17:30:38

标签: c++ c++11

我正在使用itoa查看此示例,并希望了解有关该语句的更多信息

char buffer [sizeof(int)*8+1];

作者为什么要[sizeof(int)*8+1]?我理解sizeof(int),但为什么作者会*8+1

这是代码

#define _OPEN_SYS_ITOA_EXT
#include <stdio.h>
#include <stdlib.h>

int main ()
{
   int i;
   char buffer [sizeof(int)*8+1];
   printf ("Enter a number: ");
   if (scanf ("%d",&i) == 1) {
      itoa (i,buffer,DECIMAL);
      printf ("decimal: %s\n",buffer);
      itoa (i,buffer,HEX);
      printf ("hexadecimal: %s\n",buffer);
      itoa (i,buffer,OCTAL);
      printf ("octal: %s\n",buffer);
   }
   return 0;
}

我从here

得到了这个例子

2 个答案:

答案 0 :(得分:3)

如果你有一个int,那么它的二进制数字是sizeof(int) * CHAR_BIT。由于CHAR_BIT通常为8,只要它是char buffer [sizeof(int)*8+1];,就会生成一个缓冲区,可以存储二进制数字和终止空字符,这是有效的c字符串所需的。

答案 1 :(得分:-2)

这是C风格的字符串。这些字符串以空值终止。例如字符串&#34; Hello&#34;将包含字符&#39; H&#39;,&#39;&#39; l&#39;,&#39; l&#39;,&#39; o&#39;和&#39; \ 0&#39;。

+1代表空字符&#39; \ 0&#39;。