2012-06-14 48 views
0

我使用memcmp得到了一個可能很小的問題。我有兩個數組完全相同的數組(長度= 3個字節)。C + + memcmp與unsigned char數組失敗?

如果我嘗試將它們與memcmp進行比較,它會失敗嗎?

if (memcmp(ucbuffer, ucnewbuffer, buffer.sDeviceData.sLenght)) { 
    cout << "val written, val ok!\n"; 
}; 

ucbuffer,ucnewbuffer都是無符號字符*和使用

calloc(buffer.sDeviceData.sLenght, sizeof(unsigned char); 

被分配如果我用手兩個數組比較,兩者將導致被完全一樣的。

你有什麼想法嗎?

祝您有個愉快的夜晚。

+1

發佈所有代碼,而不僅僅是代碼片段。 – dcp

回答

9

當緩衝區比較相等時,該函數返回(即,不是真)。

+0

我以爲真= 0,假-1因此檢查0意味着真實?!嗯......如果你是對的,那麼我的代碼的其餘部分也不能工作...... – AllDayPiano

+0

在這種情況下檢查0意味着比較相等,0傳統上是錯誤的,雖然 –

+0

*任何* C或C++引用應該告訴你false爲零,true爲1(加上所有其他非零值)。函數在* success *時返回零是很常見的,在這種情況下,非零結果有時會指示錯誤代碼。也許你在想這件事,並將其與這種情況混淆起來。但是'memcpy'沒有失敗的結果。即使緩衝區不相等,該功能仍能*成功告訴你結果。如果它幫助你記住,'memcpy'返回與'strcpy'相同的方式;結果的符號告訴你哪個參數應該先於另一個排序。 –