2016-12-05 26 views
0

上午, 我希望有人在这里 假设我有以下的结构,甚至更好结构的数组的组成员为零

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

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); 

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

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

+1

'sizeof(char)* 8'?为什么? '8'从哪里来? – AnT

+0

对不起,是的,这只是我的错误 –

+4

你似乎正在用C编写代码。让你的生活更轻松,并使用C++,例如'std :: vector '。那么你将不必玩任何'malloc'和'memset' shenanigans。 – juanchopanza

回答

0

可以通过每个数组元素的b构件设置为零每个数组元素的b构件设置为零位。你几乎在那里,但:

  1. 你只想零为b成员。
  2. 你调零的东西不是8个字节长。

 

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

是的我只想将.b设置为不同的值。所以我正在寻找更快的方式,就像他们做的那样 –

+0

@M.Oops,我以为.b已经在那里了。 – immibis

+0

但有没有一种方法通过使用偏移初始化所有.b没有任何for循环 –

1

我想建议,而不是使用的int b[10]; C风格的数组,你使用std::array<char,10> b;代替。

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

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

+0

谢谢,但我其实我正在寻找它在C风格完成 –

+0

@IurieCojocari那么你为什么标记你的问题C + +而不是C? – Lundin

+0

我是我的错,但两种解决方案都很好。感谢您花时间阅读和回答 –