Unix/Linux环境C编程入门教程(23) 字符数字那些事儿
包含头文件:
#include <stdlib.h>
函数原型:
int atoi( const char *str );
功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str 中读到非数字字符则结束转换。
参数str字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。
示例代码:
i = atoi( "512.035" );
i 的值为 512.
2.atol函数
包含头文件:
#include <stdlib.h>
函数原型:
long atol( const char *str );
函数功能:将字符串转换成长整型数并返回结果。函数会扫描参数str字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时才结束转换,并将结果返回。
返回值:返回转换后的长整型数。如果传入的字符串为空,或者字符串包含的内容非阿拉伯数字序列,则函数返回默认值0
示例代码:
x = atol( "1024.0001" );
x的值为1024L.
3.atof函数
所需要的头文件:
#include <stdlib.h>
函数原型:
double atof( const char *str );
函数功能:
将字符串str转换成一个双精度数值并返回结果。 参数str 必须以有效数字开头,但是允许以"E"或"e"除外的任意非数字字符结尾。
返回值:
返回转换后的浮点型数
示例代码:
x = atof( "42.0is_the_answer" );
x的值为42.0.
通过这个3个函数我们是不是发现了什么呢?
ato* 型
如果是i 代表int也就是从ascii码值转化成一个int的值,
同理 l 代表转换成一个long型的值,
f代表转换成一个float型的值。
4.Linux中查找这些函数
我们进入到Linux桌面
点击在终端中打开
在终端中输入 man atoi
如下显示的是man中关于atoi atol的介绍
同理我们可以使用man查看atof的介绍 在终端中键入:man atof
退出man帮助文档的界面
5.小试牛刀
下面我们使用这3个函数写几行有意思的代码加深理解。
#include <stdio.h> //printf scanf
#include <stdlib.h> //atoi atol atof int main(void)
{
char input[32]="4294967299";
int iNum = atoi(input);
float fNum = atof(input);
long lNum = atol(input);
printf("int = %d\nfloat = %f\nlong = %ld\n",iNum,fNum,lNum);
return 0;
}
在RHEL7中打开终端 利用vi创建一个main.c或者在windows上传送进虚拟机
回车进入
同时按下:键和shift键 进入末行模式 然后输入wq
保存并退出之后会到终端的界面
下面开始编译 ./itcast运行可执行文件 结果显示出来了
慢着 怎么int的值输出3了呢?
思考一下 我们输入的字符4294967296这个数值是太大了
6.数据类型与范围
超过int的范围 所以一旦数值超过了该数据类型所能表示的范围就会发生溢出
数据模型决定了C语言中基本数据类型与数据宽度的对应关系。我们常用的32位模型称为ILP32,而64位模型有三种:LP64、LLP64和ILP64。在64位模型中,指针一定是64位的,但是int和long的宽度则在不同的数据类型中有不同的定义。
现在的Windows 32和Linux 32是ILP32;Windows x64 版采用的是LLP64模型,Linux64采用的是LP64模型,用gcc编译时可以指定-m32按照ILP32模型进行编译。
|
数据类型\模型 |
LP32 |
ILP32 |
LLP64 |
LP64 |
ILP64 |
|
char |
8 |
8 |
8 |
8 |
8 |
|
short |
16 |
16 |
16 |
16 |
16 |
|
int |
16 |
32 |
32 |
32 |
64 |
|
long |
32 |
32 |
32 |
64 |
64 |
|
long long |
64 |
64 |
64 |
64 |
64 |
|
pointer |
32 |
32 |
64 |
64 |
64 |
总结:使用一个数据类型的时候我们应该清晰的知道该数据类型的范围能否完全表示这个变量
7.其他环境中效果怎么样呢?
在Solaris x64上
在RHEL6 32bit上
在MAC x64上
通过上述实验我们可发现,不同的操作系统可能对于数据类型的采用也是不一样的。
这对于我们以后要写一个跨多个操作系统的程序提出了警示。
有兴趣的同学可以去研究一下,对应着本文给出的数据类型和模型的对应图去推测各个操作系统的选用数据类型的版本。
Unix/Linux环境C编程入门教程(23) 字符数字那些事儿的更多相关文章
- Unix/Linux环境C编程入门教程(26) 字符数字那些事儿
1.gcvt() strtod() strtol() strtoul() toascii() tolower() toupper函数介绍 gcvt(将浮点型数转换为字符串,取四舍五入) 相关函数 ec ...
- Unix/Linux环境C编程入门教程(30) 字符串操作那些事儿
函数介绍 rindex(查找字符串中最后一个出现的指定字符) 相关函数 index,memchr,strchr,strrchr 表头文件 #include<string.h> 定义函数 c ...
- Unix/Linux环境C编程入门教程(29) 内存操作那些事儿
函数介绍 memccpy(拷贝内存内容) 相关函数 bcopy,memcpy,memmove,strcpy,strncpy 表头文件 #include<string.h> 定义函数 voi ...
- Unix/Linux环境C编程入门教程(28) 日期时间那些事儿
记得这个专题第一篇我们写过一个程序运行时间的程序,采用库函数提供的clock()模拟做程序测试.本篇介绍的函数也是和时间相关,但是没有clock的细致,而是提供的系统时间和日期. 1.asctime( ...
- Unix/Linux环境C编程入门教程(32) 环境变量那些事儿
1. getenv() putenv()setenv()函数介绍 getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdli ...
- Unix/Linux环境C编程入门教程(19)Red Hat Entetprise Linux 7.0环境搭建
位架构,包括英特尔X-86_64.Power和s390.动态定时能力将降低内核内部中断数量,Open vSwitch 2.0功能可调节虚拟机之间的流量.RHEL 7中默认的文件系统是XFS,包含了一个 ...
- Unix/Linux环境C编程入门教程(5) Red Hat Enterprise Linux(RHEL)环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 通过./a.out ./Y.out执行出结果,证明C++程序编译成功,也就说明li ...
- Unix/Linux环境C编程入门教程(4) Debian Linux环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 1.广义的Debian是指一个致力于创建自由操作系统的合作组织及其作品,由于Deb ...
- Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建
Unix/Linux版本众多,我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习. 2010年9月,Oracle Enterprise Linux发布新版内核--Un ...
随机推荐
- Material风格的Quick组件,妈妈再也不用担心我的界面不好看了
https://github.com/papyros/qml-material http://www.zhihu.com/question/38523930
- http cookie
一.cookie的大小 cookie只能存储最大4kb的数据.cookie的名/值中的值不允许包含分号.逗号和空白符.因此可以采用encodeURIComponent()编码,读取的时候先采用deco ...
- GET POST方法长度限制
GET POST方法长度限制 1. Get方法长度限制 Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制.这个限制是特定的浏览器及服务器对它的限制. ...
- POJ3268 Silver Cow Party(dijkstra+矩阵转置)
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15156 Accepted: 6843 ...
- 【转】android camera(一):camera模组CMM介绍
关键词:android camera CMM 模组 camera参数平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者:xubin ...
- Selenium模块化
概述 高内聚低耦合是软件设计的一个基本原则. 内聚:从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事.它描述的是模块内的功能联系. 耦合:各模块之间相互连接的一种度量,耦合强弱取决于模块 ...
- libev事件库学习笔记
一.libev库的安装 因为个人的学习环境是在ubuntu 12.04上进行的,所以本节仅介绍该OS下的安装步骤. 使用系统工具自动化安装: sudo apt-get install libev-de ...
- VS2012+SQL2008+ODBC编程,第一篇博客,写的不好忘各位大神指点一二~
近期写一个数据库的课程设计,用的是C++ MFC .最開始用的是ADO技术,可是苦于网上大部分的教程都是VC6.0的,对着教程敲了4,5遍还是执行不成功.我用的IDE是VS2012,毕竟VC6.0和V ...
- c++引擎开发
MyMap.erase(Itor++); //在windows下也可以Itor = MyMap.erase(Itor),但是在linux下不行. 一个是把指针定为const .就是不能修改指针.也就是 ...
- 关于 jsp:include 传参的用法
引用模版页面的代码,如下: <jsp:include page="/WEB-INF/template/nav_template.jsp"> <jsp:pa ...