如何读取argv的数字参数?
2016-01-12 17:58
429 查看
今天要把argv里面的数字读取出来,开始是用下面的方法:
for (i = 0; i < (*(argv[1]) - '0'); i++) {
哎怎么回事?用gdb调试一下:
(gdb) set args 20
(gdb) start
Temporary breakpoint 1 at 0x8048b1b: file client.c, line 7.
Starting program: /home/risen/projects/client
20
Temporary breakpoint 1, main (argc=2, argv=0xbffff6d4) at
client.c:7
7 {
(gdb) p argv[1]
$1 = 0xbffff822 "20"
(gdb) p *argv[1]
$2 = 50 '2'
(gdb)
终于找到问题,原来直接用*argv[1]只能得到第一个数字的字符,也就只能读取0~9这十个数。奇怪,为什么会这样呢?为什么得到的是一个字符而不是字符串?
如果哪位大神知道原因的话还望赐教,小弟不胜感激
百度之后发现 atoi() 函数成功解决了这个问题:(以下引自百度百科)
函数名: atoi
用 法: int atoi(const char *nptr);
功 能: 将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回转换后的整型数)。
输出结果:
string = 12345.67 float = 12345.000000
for (i = 0; i < (*(argv[1]) - '0'); i++) {
哎怎么回事?用gdb调试一下:
(gdb) set args 20
(gdb) start
Temporary breakpoint 1 at 0x8048b1b: file client.c, line 7.
Starting program: /home/risen/projects/client
20
Temporary breakpoint 1, main (argc=2, argv=0xbffff6d4) at
client.c:7
7 {
(gdb) p argv[1]
$1 = 0xbffff822 "20"
(gdb) p *argv[1]
$2 = 50 '2'
(gdb)
终于找到问题,原来直接用*argv[1]只能得到第一个数字的字符,也就只能读取0~9这十个数。奇怪,为什么会这样呢?为什么得到的是一个字符而不是字符串?
如果哪位大神知道原因的话还望赐教,小弟不胜感激
百度之后发现 atoi() 函数成功解决了这个问题:(以下引自百度百科)
函数名: atoi
用 法: int atoi(const char *nptr);
功 能: 将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回转换后的整型数)。
// 例程: #include<stdlib.h> #include<stdio.h> int main(void) { float n; char const *str="12345.67"; n=atoi(str); printf("string=%sfloat=%f\n",str,n); return 0; }
输出结果:
string = 12345.67 float = 12345.000000
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- 如何组织构建多文件 C 语言程序(二)
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程