2016-12-05 54 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

我是我的錯,但兩種解決方案都很好。感謝您花時間閱讀和回答 –