2013-07-25 77 views
-1

我有一個函數的memcpy Qt和編譯錯誤

SCalibration(uint8_t number, const ABC::report& report, 
         return* ret) 
{ 
    uint8_t args[2]; 
    args[0]=number; 
    memcpy(&(args[1],&report,sizeof(ABC::report))); 
} 

其中report是不同的數據類型結構,文件ABC。 當我試圖編譯我得到的錯誤 「L值需要爲一元&操作。

請幫

+2

貌似放錯地方'()',儘管目前尚不清楚你的目的地是大到足以容納源。 –

回答

0
memcpy(&(args[1],&report,sizeof(ABC::report))); 

應該

memcpy(&(args[1]),&report,sizeof(ABC::report)); 

你也應該確保args足夠大到可以容納結果

+0

這個解決方案將不起作用,因爲來源大於'1字節',這最多會引入段錯誤,它會在沒有崩潰的情況下破壞數據。 –

0

你有一些流氓括號;它看起來像你的意思是

memcpy(&args[1],&report,sizeof(ABC::report)); 

report字節複製到args陣列。

現在的問題是,如果報告大於一個字節,則會溢出陣列。也許你想:

uint8_t args[1 + sizeof(ABC::report)]; 
0

你在這一行有一個錯位的一套() S:

memcpy(&(args[1],&report,sizeof(ABC::report))); 

它看起來像你預期:

memcpy(&(args[1]),&report,sizeof(ABC::report)); 

我的下一個觀察是,您的目的地只有1 byte是你的來源report只有1 byte的大小?如果不是你有一個溢出這是未定義的行爲。一個解決辦法是通過你的數據的大小來調整args大小:

uint8_t args[sizeof(ABC::report)+1]; 
+0

我的源報告大小約爲100字節。 – user2618994

+0

這不起作用,你需要添加sizeof(ABC :: report)到你的數組大小或類似的東西。 –