2016-03-29 61 views
0

我感到困惑下面的代碼不起作用:memset的()如預期

#include<iostream> 
#include<cstring> 

int main() 
{ 
    int arr[3][4]; 
    memset(arr, 10, sizeof(arr)); 
    for(int i = 0; i < 3; ++i) 
    { 
     for(int j = 0; j < 4; ++j) 
      std::cout<<arr[i][j]<<" "; 
     std::cout<<"\n"; 
    } 

    return 0; 
} 

輸出:

168430090 168430090 168430090 168430090 
168430090 168430090 168430090 168430090 
168430090 168430090 168430090 168430090 

我的預期運行上面的代碼將打印

10 10 10 10 
10 10 10 10 
10 10 10 10 

有人可以解釋這種奇怪行爲的原因嗎?

+0

* memset()無法按預期工作* - memset可正常工作。您需要提供適當的參數。如果你想要做什麼遠程執行你想要完成的任務,[std :: fill](http://en.cppreference.com/w/cpp/algorithm/fill) – PaulMcKenzie

+1

'memset'函數不知道這是一個「int」數組,因此不知道如何給它們解碼爲10的正確模式。 –

回答

6

貝塞爾int是超過一個字節長。 memset()用給定值填充每個字節。因此,您的4字節整數的每個字節都包含一個10.

3

memset會將傳遞的內存視爲指向字節的指針。每個字節將被設置爲10,而不是每個int。

所以你打印出每個int 0x0a0a0a0a或168430090。