关于32位/64位版本头文件的重要

1.今天在测试产品发现一个十分异常的现象,代码从语法上分析完全正确,代码如下

2.在32位系统上编译可以通过,其中第15行出现警告:warning: initialization makes pointer from integer without a cast,

但执行时,正常结束

3.在64位linux系统编译可以通过,其中第15行出现警告:warning: initialization makes pointer from integer without a cast,

但在执行时出现 Segmentation fault (core dumped),0x0000003791f3386f in __strlen_sse42 () from /lib64/libc.so.6

崩溃在 strlen() 处

分析了半天,且查看man文档,确认自己接口的使用是正确的,最后跟同事交流了一下,提到头文件,跟 inet_ntoa() 的 man 文档

对比发现,少了第 6 行的头文件,加上后,在64位也就没问题了。

4.今天头一次在64位上测试,遇到这事儿,从找到这个bug的地方、再研究问题原因,花费半天时间,且很是郁闷

5.可以发现,如果在某个方面经检查确认没有错误,就该去其他方面、角度尝试查找失误之处

6.本头文件在32位/64位上的确是有区别的

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/socket.h>
 5 #include <netinet/in.h>
 6 //#include <arpa/inet.h>
 7
 8 int main(int agrc, char **argv[])
 9 {
10     unsigned long hostip = 0;
11     hostip = inet_addr("130.168.9.104");
12
13     struct in_addr myaddr;
14     myaddr.s_addr = hostip;
15     char *pip = inet_ntoa(myaddr);
16
17     printf("... ip is %s, len = %d\n", pip, strlen(pip));
18     return 0;
19 }
时间: 2024-12-23 23:31:20

关于32位/64位版本头文件的重要的相关文章

dll文件32位64位检测工具以及Windows文件夹SysWow64的坑(很详细,还有自动动手编程探测dll)

阅读目录 dll文件不匹配导致数据库无法启动 究竟是System32还是SysWow64 区分dll文件32位64位的程序让我倍感迷惑 再次判断究竟是System32还是SysWow64——意想不到的坑 Program Files (x86)与Program Files 32位程序真的需要访问System32吗 32位程序与64位程序的区别总结 参考资料 自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program

查看系统版本、32位与64位生产场景中的使用及对比

一.查看系统版本 [[email protected] ~]# uname -a #系统版本详细信息 Linux ysolin 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# uname -r   #内核版本 2.6.32-431.el6.x86_64 [[email protected] ~]# uname -m   #

qml实现对SSL的支持(使用msys2,同时支持32和64位)超详细 good

首先准备环境.两种方法,使用mingw64 或者VS 直接放上下载地址https://sourceforge.net/projects/msys2/我下载的是msys2-x86_64-20161025 ,同时支持32和64位里面有三个EXE   msys2  mingw64  mingw32  3个程序完全独立各自使用各自的gcc 再也不用麻烦的切换了.进入msys2  这时可以运行  pacman   使用说明地址https://wiki.archlinux.org/index.php/pac

SQLite的.NET应用自适应32位/64位系统 z

如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.Data.SQLite,完成兼容ADO.NET接口,也提供了Linq和Entity Framework 6实现.但这不重要,重要的是System.Data.SQLite是由两部分代码组成的,一部分是非托管的C++代码实现,一部分是托管代码与.NET 框架接口.由于非托管代码不能构建成“Any CPU”

32位与64位

1.我们所说的64位CPU架构指的是64位内存扩展技术,它是32CPU架构的一个扩展,且兼容原来的架构.它通过增加CPU的运算位宽扩展增加CPU和内存之间的位宽,从而让系统支持更大容量的内存,64位最大支持64G. 2.处理器模式:传统32位模式:安装32位操作系统,安装32位硬件驱动程序,安装32位应用程序.目前大多数人的处理器是Intel 64,安装了32位操作系统,程序运行良好,包括16bit和32bit程序. 兼容模式:操作系统和硬件驱动程序都是64bit,计算机允许64bit操作系统下

阿里云主机Windows 2008 32位 64位自助正版激活图文教程

这篇文章主要介绍了阿里云主机Windows 2008 32位 64位自助正版激活图文教程,本文讲解详细,图文说明自助激活Windows正版教程,需要的朋友可以参考下 Windows2008 32位.64位 中文版操作系统,自助激活Windows正版,远程登录服务器后: 1.开始——运行 2.在运行里面输入cmd. 系统会跳出如下窗口: 3.输入slmgr   -skms   kms.aliyun-inc.com 4.输入slmgr -ato 5.完成

dumpbin判断windows程序是32还是64位(包括DLL)

http://blog.csdn.net/csfreebird/article/details/10105681 dumpbin /HEADERS gdal18.dll(or xxx.exe) 如果安装过VS2012的话,直接打开一个VS 2012提供的控制台窗口,比如VS2012 x64 Native Tools Command Prompt. 用下面的命令查看程序的头部信息: [cpp] view plain copy gdal_1.8_rtc>dumpbin /HEADERS gdal18

深度技术ghost win8 32位/64位装机旗舰版V2014

深度技术ghost win8 32位装机旗舰版V2014下载地址:http://pan.baidu.com/s/1kTLqJLt 深度技术ghost win8 64位装机旗舰版V2014下载地址:http://pan.baidu.com/s/1i3zakU5 本软件深度技术ghost win8 32位/64位装机旗舰版V2014由深度系统官网特别分享: 一.主要更新 * 更新PE系统采用2003内核,支持最新型号机器,解决一些笔记本认不到硬盘问题. * 驱动采用自由天空最新驱动包,个别电脑可能会

32位与64位系统的不同点

设计的初衷不同 64位操作系统的设计初衷是:满足机械设计和分析.三维动画.视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的客户需求,简单说就是64位操作系统是为专业用户专业软件而设计的,而32位系统是为普通用户设计的. 要求配置不同 64位操作系统只能安装在64位电脑上,即CPU必须是64位的,同时需要安装64位常用软件以发挥最佳性能.32位操作系统可以安装在32位或64位电脑上,但是32位操作系统安装在64位电脑上显然不能充分发挥64位硬件的性能. 运算速度不同