memset()没有将值设置为一个[重复]

Posted

技术标签:

【中文标题】memset()没有将值设置为一个[重复]【英文标题】:memset() not setting vales to one [duplicate] 【发布时间】:2016-05-31 01:04:57 【问题描述】:

我需要将数组的所有值都设置为 1。我一直在尝试使用以下代码来做到这一点:

int bulbSwitch(int n) 
    int bulbs[n];
    memset(bulbs, 1, n * sizeof(int));
    ...

但是,调试器显示数组中的所有值实际上都设置为 16843009。没有memset,数组值看似随机的正整数。为什么会这样,我该如何解决?

【问题讨论】:

【参考方案1】:

memset 将每个 byte 内存设置为您指定的值。您平台上的 int 显然是 4 个字节。因此,您将int 的每个字节设置为 1。

也就是说,对于每个int,代码都有效:

bulbs[i] = 0x01010101;

十进制值正好是16843009

这意味着你不应该使用memset,而是一个简单的循环来设置数组的每个元素。

【讨论】:

以上是关于memset()没有将值设置为一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 memset 之后未写入结构数组的值

memset函数使用

struct 0 和 memset 0 有啥区别 [重复]

使用 memset 防止“可变大小的对象可能未初始化”

Metal C中的memset问题

为数组赋值:memset vs for 循环