c memset指针数组

时间:2016-10-29 09:11:50

标签: c memset

我的指针数组动态分配,长度为10.

现在我想用所有" 1"初始化这个数组。

但是如果我打印出阵列[2]它会显示0。 如果我打印出数组[1],它会显示一个像4905904374893479这样的高数字。 为什么这个数组没有设置为" 1"在所有位置?

我没有太多经验,但我没有找到解决方案。

uint64_t *array=  malloc((10) * sizeof(uint64_t));
memset(array,1, sizeof(*array));
printf("array[2]: %llu \n", primes[2]); 

2 个答案:

答案 0 :(得分:4)

*array uint64_t,而不是整个数组。这意味着你的memset没有设置整个数组,只是它的第一个元素。

并且,在您决定使用sizeof(array)之前,请注意它会衰减到该数组的指针,因此也不会是正确的大小。

memset函数适用于字节而不是更宽的数据类型,因此,除非您希望每个字节设置为相同的值,memset不是作业的工具。将它们设置为0时,它的工作原理只是因为它以全零模式表示。

你最好的选择是用以下内容明确地初始化每个:

uint64_t *array=  malloc(10 * sizeof(uint64_t));
// should really check for malloc failure.
for (size_t idx = 0; idx < 10; idx++)
    array[idx] = 1;

答案 1 :(得分:3)

public string FirstName 使用memset填充它,因此您在每个64位条目中获得的内容为char

而BTW,0x0101010101010101只给出了数组中单个条目的大小。

您也可以使用简单的sizeof(*array)循环:

for