我用win7寫了一個文本處理的MFC應用。程式在win10上面運行就出錯。出錯原因是我先把一個char*指標轉為int型進行保存,后面要用時再通過(char*)轉回來,然后就錯了。如下兩個陳述句,第一個陳述句運行正確,第二個陳述句就運行出錯,求解。。
TRACE("the test string is:%s\n", testarray);-------------------------->正確執行
TRACE("the test string2 is:%s\n",(char*)((int)testarray));------------------->執行出錯
是系統差異導致的嗎?
uj5u.com熱心網友回復:
int 在VS中是32位, 如果是64位系統 自然會被截斷試試 __int64
uj5u.com熱心網友回復:
看看轉換前后,地址是否有變化uj5u.com熱心網友回復:
果然是被截斷了。感謝zgl7903,oyljerry。WIn7的char*型是4個位元組,WIN8和win10都是8個位元組,系統都是64位的。這是個坑,還是不要用int存盤指標的好。就是指標的大小是由什么決定的有人能說清楚嗎?uj5u.com熱心網友回復:
指標大小和編譯器指定的環境有關, WIN32 32位 X64 64位為兼容編譯環境可以使用 INT_PTR
TRACE(_T("the test string2 is:%s\n"),(char*)((INT_PTR)testarray));-
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/78395.html
標籤:硬件/系統
