1

这可能是一个非常简单的问题,也可能不是一个非常简单的问题,但我想知道调用什么函数来确定在任何给定时间数组中有多少字节。例如,我怎么知道在下面的代码中将什么作为第三个参数放在发送命令中?

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

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

4 回答 4

5

数组的大小是恒定的(它只是一大块内存)。

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

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

于 2012-10-28T21:59:48.297 回答
2

您无法获取为数组动态分配的项目数,因此该行memset(array, 0, sizeof(array))不会用 0 填充数组中的 500 个项目,并且sizeof(array)始终等于sizeof(int*),因此如果您想访问已分配的项目数对于数组,您应该使用包含大小的单独值或使用 C++ 存储,例如std::vector

于 2012-10-28T22:00:59.123 回答
2

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

如果要清除堆内存,请这样做:

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

或在初始化时:

int *array= new int[500]();
于 2012-10-28T22:06:16.010 回答
0

另请查看www.cplusplus.com/faq/sequences/arrays/sizeof-array/是关于该主题的好读物(不是直接关于 sizeof() 运算符,而是通常以适当的“C++ 方式”在 C++ 中处理数组)。

于 2012-10-28T22:13:12.013 回答