【问题标题】:set member of array to zero将数组的成员设置为零
【发布时间】:2016-12-05 22:27:43
【问题描述】:

早上, 我希望有人在这里 假设我有以下结构,甚至更好的结构数组

struct foo {
  int a;
  char b[10];
  char c;
};

struct foo* bar;
bar = (struct foo*) malloc(sizeof(struct foo)*10);
memset(bar, -1, sizeof(struct foo)*10);

而不是

for (counter = 0; counter < 10; ++counter)
      memset(bar[counter],0,sizeof(char)*10);

如何在所有数组的char / b成员的所有数组中将b成员设置为0?

基本上我的问题有点类似于this一个

【问题讨论】:

  • sizeof(char)*8?为什么? 8 哪里来的?
  • 对不起,是的 10 这只是我的错误
  • 您似乎正在使用 C 进行编码。让您的生活更轻松并使用 C++,例如std::vector&lt;foo&gt;。这样你就不必玩任何mallocmemset 恶作剧了。
  • OP 请说明是使用C还是C++
  • 如果您使用 C,则使用 calloc(),它类似于 malloc(),但会处理数学以确定正确的大小并将内存归零。

标签: c++ bit


【解决方案1】:

我想建议您不要使用 int b[10]; 的 C 样式数组,而是使用 std::array&lt;char,10&gt; b;

然后你可以这样用零填充它:b.fill(0);。 如果您需要将存储地址传递给 C 风格的函数,您可以使用 b.data() 来完成。 当然,您仍然可以使用b[i] 访问其内容,但如果您想要更安全,请使用b.at(i)

http://en.cppreference.com/w/cpp/container/array

【讨论】:

  • 谢谢,但实际上我希望用 c 风格完成它
  • @IurieCojocari 那你为什么将你的问题标记为 C++ 而不是 C?
  • 我是我的错字,但两种解决方案都很好。感谢您花时间阅读和回答
【解决方案2】:

您可以通过将每个数组元素的b 成员设置为零来将每个数组元素的b 成员设置为零。你快到了,但是:

  1. 您只想将b 成员归零。
  2. 您要归零的东西不是 8 个字节长。

 

for (counter = 0; counter < 10; ++counter)
    memset(bar[counter].b, 0, sizeof bar[counter].b);

【讨论】:

  • 是的,我只想将 .b 设置为不同的值。所以我正在寻找像他们一样更快的方法
  • 但是有没有一种方法通过使用偏移量来初始化所有 .b 而没有任何 for 循环
  • 这可能是答案,然后我们使用 memset 我们指定应该清除为给定值的内存范围,以便它可能破坏整个内存
  • @IurieCojocari 号
  • 抱歉噘嘴,是不是意味着可以通过 memset(bar, 0, offsetOfb + structureAndress) 解决这个问题?
猜你喜欢
  • 2012-11-11
  • 2011-07-18
  • 1970-01-01
  • 2014-12-25
  • 2023-04-04
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多