bdh*_*har 4 c++ struct casting compiler-errors compiler-warnings
我struct
喜欢这个
typedef struct _somestruct {
int a;
int b;
}SOMESTRUCT,*LPSOMESTRUCT;
Run Code Online (Sandbox Code Playgroud)
我正在创建一个对象struct
并试图像这样打印它的地址
int main()
{
LPSOMESTRUCT val = (LPSOMESTRUCT)malloc(sizeof(SOMESTRUCT));
printf("0%x\n", val);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
..我得到了这个警告
警告C4313:'printf':格式字符串中的'%x'与'LPSOMESTRUCT'类型的参数1冲突
所以,我试着将地址转换int
成这样的
printf("0%x\n", static_cast<int>(val));
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
错误C2440:'static_cast':无法从'LPSOMESTRUCT'转换为'int'
我在这里错过了什么?如何避免这种警告?
谢谢.
Jer*_*fin 12
%x
期待未签名.你打印的是一个指针.要正确地做到这一点,通常要使用%p
.为了迂腐正确,这需要一个指向void的指针,所以你需要将它转换为:
printf("%p\n", (void *)val);
Run Code Online (Sandbox Code Playgroud)
实际上,大多数当前实现对所有指针使用相同的格式,在这种情况下,转换将是空的.当然,考虑到C++标签,你所包含的大多数代码都充其量是有问题的(除了像LPSOMESTRUCT之类的部分,无论如何都是有问题的).在C++中,您通常需要更多类似的东西:
struct somestruct {
int a;
int b;
};
somestruct *val = new somestruct; // even this is questionable.
std::cout << val;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13185 次 |
最近记录: |