2017-07-22 30 views
0

我試圖將原始代碼簡化爲一個簡單的測試示例,它複製了我所遇到的問題。我事先對這個簡單的問題表示歉意。我是一個C++初學者。使用memcpy結果輸出0應對緩衝區?

因此,移動的實際問題..爲什麼我得到0作爲輸出?對於我的這個例子和我的理解,函數不應該被修改,除了它們中的數值(如果它是必需的)(意思是我錯了:)。

非常感謝提前。

static unsigned short buffer[5]; 

void settingMemory() 
{ 
    memset(buffer, 0, sizeof(buffer)); 
} 

void copingMemory(const unsigned short *pixels) 
{ 
    memcpy(&buffer[5], pixels, 5*sizeof(unsigned short)); 
} 

void printingMemory() 
{ 
    unsigned short *test = buffer; 
    std::cout << *test << std::endl; 
    std::cout << *test++ << std::endl; 
    std::cout << *test++ << std::endl; 
    std::cout << *test++ << std::endl; 
    std::cout << *test++ << std::endl; 
    std::cout << *test++ << std::endl; 
} 

int main(int argc, char* argv[]) 
{ 
    settingMemory(); 
    unsigned short test[5]; 
    test[0] = 5; 
    test[1] = 55; 
    test[2] = 555; 
    test[3] = 5555; 
    test[4] = 55555; 
    copingMemory(test); 
    printingMemory(); 
} 

我的輸出是:

0 
0 
0 
0 
0 
0 
+2

您正在複製和打印傳入數組的末尾 –

+0

使用std :: vector。如果您最後需要複製,使用std :: copy而不是memcopy。你覺得'&buffer [5]'是什麼? –

+0

謝謝邁克爾的快速回應。 爲了我的理解,是否有可能給我一個工作的例子? – user3270371

回答

0

memcpy(&buffer[5], pixels, 5*sizeof(unsigned short));複製到緩衝器的第六元素的開始(即,第一元件/外側/緩衝與memcpy(&buffer[0], pixels, 5*sizeof(unsigned short));更換它,因此。您將其複製到第一個元素