首先請原諒我有限的c知識,但我怎麼可以在32位和64位平臺上投入一個字符指針爲長?此代碼給了我與Visual Studio編譯器警告C4311 2015鑄造字符指針長
char *c;
long l;
l = (long)(c);
感謝
編輯
錯誤代碼是'類型轉換':從 '字符*' 到 '長'指針截斷 可以downvotes讓我知道他們爲什麼downvoted?
首先請原諒我有限的c知識,但我怎麼可以在32位和64位平臺上投入一個字符指針爲長?此代碼給了我與Visual Studio編譯器警告C4311 2015鑄造字符指針長
char *c;
long l;
l = (long)(c);
感謝
編輯
錯誤代碼是'類型轉換':從 '字符*' 到 '長'指針截斷 可以downvotes讓我知道他們爲什麼downvoted?
不要這樣做,如果你能避免它。
C99(和更新)支持一種名爲uintptr_t
的類型。這是一個能夠保存指針值的整數類型。有關更多信息,請參閱stddef.h。
Visual Studio不知道完全支持C99。因此,你可能無法工作,但值得一試。
char* c = <some value>;
uintptr_t ptr = (uintptr_t)c;
如果您編譯C源文件作爲C++源,(使用/TC
編譯器選項),你應該能夠使用它。
將指針指向整數的目的是什麼?你可以使用一個聯合體,一個結構體,或者一個void *。
Microsoft編譯環境默認爲LLP64,其中long爲32位寬,如果您的指針爲64位寬,則可能太窄。 - >https://msdn.microsoft.com/en-us/library/cc953fe1.aspx
我相信例程是計算一個因爲它正在執行自己的堆棧處理,所以使用intptr_t或uintptr_t是一種解決方案? –
simon-p-r,在這種情況下,還有size_t和ptrdiff_t數據類型,但我認爲將指針存儲爲整數是濫用行爲,導致代碼難以閱讀。我的建議就是 – user602469
好吧,我感謝您的意見 –
爲什麼你認爲這是合理的**不包括警告信息??!? – Amit
什麼是警告信息?有許多編譯器警告,我們怎麼可能知道哪一個_you_遇到過? –
你想用這個做什麼? – ZenJ