C ++计算整数数组中的字节数

时间:2012-10-28 21:56:58

标签: c++ arrays sockets

这可能是也可能不是一个非常简单的问题,但我想知道要调用什么函数以便在任何给定时间计算出数组中有多少字节。例如,我如何知道下面代码中send命令的第三个参数?

int *array= new int[500];
memset(array, 0, sizeof(array));

//newsockfd is declared elsewhere in the code
send(newsockfd, array, _______, 0);

4 个答案:

答案 0 :(得分:5)

数组的大小是常量(它只是一块内存)。

您需要在一个单独的变量中跟踪数组中有多少元素是有效的。

正如其他人所说,memset的最后一个参数应该是你想要设置为0的字节数 - 但array只是一个指针,所以sizeof(array)只会产生4(或64位平台上的8)。同样,您需要手动传递sizeof(int) * 500(或使用500的常量,这样如果更改,您不必在多个位置更新数字。)

答案 1 :(得分:2)

您无法获得为数组动态分配的项目数,因此行memset(array, 0, sizeof(array))不会在数组中填充500个项目,而sizeof(array)始终等于{ {1}},所以如果你想访问为数组分配的项目数,你应该使用一个包含大小的单独值,或者使用像sizeof(int*)这样的C ++存储

答案 2 :(得分:2)

您的memset()不会清除动态分配的内存new int[500],而只会清除第一个sizeof(int*)字节。

如果要清除堆内存,请按以下方式执行:

memset(array, 0, 500 * sizeof(int));

或在初始化时:

int *array= new int[500]();

答案 3 :(得分:0)

另外看www.cplusplus.com/faq/sequences/arrays/sizeof-array/是关于这个主题的一个很好的阅读(不是直接关于sizeof()运算符,而是通常用C ++方式处理C ++中的数组)。