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 ...
随机推荐
- 外贸中MFQ
MFQ = Mask Fee Quantity 退掩膜费量Masking charge USD 2000. MFQ 100k in the first year
- VS2010下WPF开发ARCGIS ENGINE 10的带Ribbon控件项目
原文 http://blog.sina.com.cn/s/blog_47522f7f0100nq5t.html 题目好长,但是集目前最新的工具于一身..VS是最新的2010版,不过用的是.net3.5 ...
- bzoj1664 [Usaco2006 Open]County Fair Events 参加节日庆祝
Description Farmer John has returned to the County Fair so he can attend the special events (concert ...
- 电子科大POJ "3*3矩阵的乘法"
3阶矩阵的乘法 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) c-source ...
- iterator的简单用法
// 给你写了个简单的例子,不知道合不合你的题意? vector<int>vertical; ; i<; i++) { vertical.push_back(i); } vector ...
- CHARINDEX (Transact-SQL)
SQL Server 2014 其他版本 2(共 3)对本文的评价是有帮助 - 评价此主题 在一个表达式中搜索另一个表达式并返回其起始位置(如果找到). Transact-SQL 语法约定 语法 ...
- 【Oracle】删除重复记录
--复习autotrace: SET AUTOTRACE OFF --不生成AUTOTRACE 报告,这是缺省模式 SET AUTOTRACE ON EXPLAIN --AUTOTRACE只显示优化器 ...
- Android Studio代码自己主动提示无效(not available in Power Save mode)
针对一位博友提的问题,我这边写出来,预计还是非常多人会碰到这个问题,可是不知道怎样解决的. 就是在设置了代码自己主动提示功能后,发现不生效的,怎样设置代码自己主动提示请戳这:Android Studi ...
- swiftTools
String+Exten.swift // // String+Exten.swift // swiftTest // // Created by napiao on 15/11/27. // Cop ...
- ssh登录命令(转)
转:http://blog.csdn.net/edward_qing_lee/article/details/23133331 常用格式:ssh [-l login_name] [-p port] [ ...