此代碼適用於Windows(Visual Studio),但在Linux GCC上,它會產生不正確的結果。有人可以發現問題嗎?什麼可以在Linux和Windows上以不同的方式工作?Windows與Linux的差異 - 差異
有沒有辦法在Linux上編譯它?我寧願讓它與GCC一起工作,所以如果你能幫我發現代碼中的問題,這些問題在Linux上的表現會有所不同,那就太好了。謝謝 -
像這樣返回: char output [8]; char * x =輸出; return x;
此代碼適用於Windows(Visual Studio),但在Linux GCC上,它會產生不正確的結果。有人可以發現問題嗎?什麼可以在Linux和Windows上以不同的方式工作?Windows與Linux的差異 - 差異
有沒有辦法在Linux上編譯它?我寧願讓它與GCC一起工作,所以如果你能幫我發現代碼中的問題,這些問題在Linux上的表現會有所不同,那就太好了。謝謝 -
像這樣返回: char output [8]; char * x =輸出; return x;
首先,你有足夠的代碼返回指向本地數組的指針,這是不允許的,當這些指針稍後被去引用時會導致未定義的行爲。如果該代碼在Windows中正常工作,則代碼無效即可幸運。
兩個典型的解決方案是:
size_t
長度值以防止改寫,當然!)到被調用的功能允許工作字符串空間。free()
成爲調用者的責任。感謝您的回覆。我可以分配內存並返回它,而不是指針嗎?你會建議什麼? – user3530178
傳遞一個指針,感謝這個想法。我會嘗試。 – user3530178
char output[8];
char *x = output;
return x;
這是你在你的很多程序(asciiToBin
這裏)的地方正在做的事情,並調用未定義的行爲。您正在返回使用自動存儲聲明的數組的第一個元素的地址。從函數返回時,具有自動存儲的對象將被銷燬,並訪問它們將調用未定義的行爲。
感謝您的回覆。你會建議如何避免這個問題? – user3530178
@ user3530178例如,您可以將輸出數組(通過指針)傳遞給函數 – ouah
感謝@ouah,我會嘗試進行更改。如果您發現其他問題,請發表評論。 – user3530178
你不能認真地期望對這段代碼量進行免費評論,對這個問題有如此模糊的「描述」?! – unwind
示例輸入文件在哪裏?什麼是預期的輸出?你究竟得到了什麼? –
謝謝李,輸入將是簡單的彙編代碼:移動ax,bx和輸出應該是:89 d8(十六進制)或二進制,它應該是:10001001 11011000 – user3530178