首先请原谅我有限的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