| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2223 人关注过本帖
标题:[求助]函数strtol的参数问题
只看楼主 加入收藏
davidloves
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-1-6
收藏
 问题点数:0 回复次数:11 
[求助]函数strtol的参数问题

字符串转换函数strtol的参数,第二个应该是指向字符串的指针,但是怎么用都不对

一个例:
char *remainderPtr;
x = strtol (string, &remainderPtr, 0);

只有加了&才对了.不加的时候有警告,而且会使结果出错.想问问为什么~怎么这样反而对了,加了&不就不是一个指针了吗?
那就应该是错的才对.


搜索更多相关主题的帖子: 函数strtol 参数 remainderPtr 指针 
2007-02-10 21:11
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
long strtol(const char *s, char **endptr, int radix)
endptr是一个指向指针的指针

羊肉串 葡萄干 哈密瓜!!
2007-02-10 21:25
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

其实我以前也不知道 strtol这个函数,今天看到了就查了一下函数库,所以这里还想问你一下char **endptr是干什么用的?函数库里也没有介绍啊


羊肉串 葡萄干 哈密瓜!!
2007-02-10 21:31
davidloves
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-1-6
收藏
得分:0 
恩比如说 char * string "1234567abc", *p;
x = strtol (string, &p, 10);
那么指针就指向字符串中被转换部分后的第一个字符的储存单元

所以如果现在来一个 printf ("%s", p);
那么就会输出 "abc"


2007-02-10 21:37
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 

哦 谢谢了


羊肉串 葡萄干 哈密瓜!!
2007-02-10 21:50
davidloves
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-1-6
收藏
得分:0 

共同进步


2007-02-10 21:54
alading664
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-1-25
收藏
得分:0 
将数值字符串转换成长整形格式数?
LZ是不是这样理解的啊,strtol将string字符串中的数字字符串转化为long,然后剩下的字符放到*p中??那那些转换过的long哪里去了?
2007-02-10 23:17
alading664
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-1-25
收藏
得分:0 

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void main()
{
char *sp="dfd123",*p;
long x;
x=strtol(sp,&p,10);
printf("%s:",p);

printf("%d",x);
getchar();
}
显示
dfd123:0
如果*sp="123dfd"
显示是
dfd:123
难道前面必须是数字符号?

2007-02-10 23:27
davidloves
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-1-6
收藏
得分:0 

就是它的返回值
x = strtol (string, &remainderPtr, 0);
就放到x里面去了
比如 string = "-1234567abc"
那么x = -1234567

还有就是有时候字母也要转换,那要看第三个参数, 他表示基数
比如:
string = 67a"
x = strtol (string, &remainderPtr, 12);
那么如果来一个printf ("%ld", x);

那么就会输出 958 (6*12^2 + 7*12 + 10)


不知道我解释清楚没~因为我也是今天才看到这个函数~

[此贴子已经被作者于2007-2-10 23:33:38编辑过]


2007-02-10 23:33
davidloves
Rank: 1
等 级:新手上路
帖 子:137
专家分:0
注 册:2007-1-6
收藏
得分:0 
以下是引用alading664在2007-2-10 23:27:41的发言:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void main()
{
char *sp="dfd123",*p;
long x;
x=strtol(sp,&p,10);
printf("%s:",p);

printf("%d",x);
getchar();
}
显示
dfd123:0
如果*sp="123dfd"
显示是
dfd:123
难道前面必须是数字符号?

从左到右直到读到第一个不能转换的为止.由于你第一个字母是d,而第三个参数是10,所以直接在第一个字符那里就停止了.
如果你把第三个参数改成14 (14进制,可以理解为现在d (即13)有效),,所以输出就会是fd123:13


2007-02-10 23:45
快速回复:[求助]函数strtol的参数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034751 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved