error: cast from ‘char*’ to ‘int’ loses precision

编译时出现错误:

        error: cast from ‘char*’ to ‘int’ loses precision

原因:程序中存在

char* addrCom;
addrCom= ......//赋值
if(-1 == (int)addrCom) //导致编译出错
{ ...... }

  

上面是隐式转换,将其改为标准C++显示类型转换:static_cast<int>或这是reinterpret_cast<int>

依然是:

error: cast from ‘char*’ to ‘int’ loses precision

最后google了一下,找到了答案:http://stackoverflow.com/questions/1640423/error-cast-from-void-to-int-loses-precision

应该将(int)addrCom 改为(long)addrCom即可

解释

因为我编译的系统为linux64位,其指针类型和long型大小相等(8B)而与int型4B,故会出现:loses precision。

故:先将char*-->long,然后从long到int自动隐式转换。

时间: 2024-10-07 06:46:56

error: cast from ‘char*’ to ‘int’ loses precision的相关文章

关于Linux下C编译错误(警告)cast from &#39;void*&#39; to &#39;int&#39; loses precision

char *ptr; //此后省略部分代码 if( (int)ptr==-1 ) //出错地方 那句话的意思是从 void* 到 int 的转换丢失精度,相信看到解释有些人就明白了, 此问题只会出现在X64位的Linux上,因为在64位的机器上指针占用8个字节,int 占用四个字节,所以才会出现这样的问题, 解决方法: (long)ptr == -1 就好了 关于Linux下C编译错误(警告)cast from 'void*' to 'int' loses precision

x86_64 xercexc: error: cast from &#39;const void*&#39; to &#39;long int&#39; loses precision [-fpermissive]

mingw编译x86_64版本xerces-c-2.8.0: 修改src/xercesc/util/HashPtr.cpp: unsigned int HashPtr::getHashVal(const void *const key, unsigned int mod , MemoryManager* const) { return ((long long)key % (unsigned long)mod); } 修改src/xercesc/internal/XSerializeEngine.

iOS开发 - &quot;Cast from pointer to smaller type &#39;int&#39; loses information” 解决办法

今天要写一个联系人搜索算法. 百度了下, 在code4App中找到相关代码. 但是自己跑了下, 发现报错. 错误内容如下: "Cast from pointer to smaller type 'int' loses information"  从错误内容我们也能看出, 错误出在'int'这里了. 而那份代码也比较早的, 在Xcode5.1之后, 要用uintptr_t来替代int. 把错误语句处的int全换成uintptr_t即可. iOS开发 - "Cast from p

CAST function should support INT synonym for SIGNED. i.e. CAST(y AS INT)

Login / Register Developer Zone Bugs Home Report a bug Statistics Advanced search Saved searches Tags Bug #73054 CAST function should support INT synonym for SIGNED. i.e. CAST(y AS INT) Submitted: 19 Jun 2014 15:55 Modified: 30 Jun 2014 11:12 Reporte

IO--int read(char cbuf[],int off,int len)

1.InputStreamReader Reader与Writer是基于字符的IO操作接口,而InputStreamReader的read方法就是以字符为单位的读方法 /** * Reads characters into a portion of an array. * * @param cbuf Destination buffer * @param offset Offset at which to start storing characters * @param length Maxi

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int(转)

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 错误类型: 缺失类型表述 错误原因: 函数前未写函数的返回类型,由此导致了这个错误 解决方法: 以后写函数,不管是声明还是定义,都要加上返回类型,尤其是返回类型是VOID时,更要加上 不要省略 error C4430: missing type specifier - int assumed. Note: C++ do

CString、char、int、string相互转化

相比于C#,C++的类型转换更为麻烦.下面列举几种主要的类型转换,当然转换的方法有很多,以下可能是最简单.有效的方式了,以后在工作和学习中再逐渐添加其他的类型转换. CString转char* CString file=GetFilePath()+"parameter.txt";    char* pszFileName=(LPSTR)(LPCTSTR)file; string转CString string str; CString ss = str.c_str(); int转CStr

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

最近发现一个奇怪的错误,错误提示如下: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 出现该段错误的源码(某公司校招技术笔试题)如下: #include<iostream> using namespace std; main() { long x=65530; long countx=0; while(x) { countx++; x=x&(x-1);

C++ 中 char 与 int 转换问题

itoa 功  能:把一整数转换为字符串 函  数:char *itoa(int value, char *string, int radix); 解  释:itoa 是英文integer to array(将 int 整型数转化为一个字符串,并将值保存在数组 string 中)的缩写. 参  数:value: 待转化的整数.          radix: 是基数的意思,即先将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制.          *s