2014-04-14 92 views
-2

此代碼適用於Windows(Visual Studio),但在Linux GCC上,它會產生不正確的結果。有人可以發現問題嗎?什麼可以在Linux和Windows上以不同的方式工作?Windows與Linux的差異 - 差異

有沒有辦法在Linux上編譯它?我寧願讓它與GCC一起工作,所以如果你能幫我發現代碼中的問題,這些問題在Linux上的表現會有所不同,那就太好了。謝謝 -

像這樣返回: char output [8]; char * x =輸出; return x;

+3

你不能認真地期望對這段代碼量進行免費評論,對這個問題有如此模糊的「描述」?! – unwind

+0

示例輸入文件在哪裏?什麼是預期的輸出?你究竟得到了什麼? –

+0

謝謝李,輸入將是簡單的彙編代碼:移動ax,bx和輸出應該是:89 d8(十六進制)或二進制,它應該是:10001001 11011000 – user3530178

回答

1

首先,你有足夠的代碼返回指向本地數組的指針,這是不允許的,當這些指針稍後被去引用時會導致未定義的行爲。如果該代碼在Windows中正常工作,則代碼無效即可幸運。

兩個典型的解決方案是:

  1. 有一個指針主叫通(和size_t長度值以防止改寫,當然!)到被調用的功能允許工作字符串空間。
  2. 爲函數內部的字符串動態分配新內存並返回該內存。當記憶不再需要時,free()成爲調用者的責任。
+0

感謝您的回覆。我可以分配內存並返回它,而不是指針嗎?你會建議什麼? – user3530178

+0

傳遞一個指針,感謝這個想法。我會嘗試。 – user3530178

1
 char output[8]; 
     char *x = output; 
     return x; 

這是你在你的很多程序(asciiToBin這裏)的地方正在做的事情,並調用未定義的行爲。您正在返回使用自動存儲聲明的數組的第一個元素的地址。從函數返回時,具有自動存儲的對象將被銷燬,並訪問它們將調用未定義的行爲。

+0

感謝您的回覆。你會建議如何避免這個問題? – user3530178

+0

@ user3530178例如,您可以將輸出數組(通過指針)傳遞給函數 – ouah

+0

感謝@ouah,我會嘗試進行更改。如果您發現其他問題,請發表評論。 – user3530178