写了个htoi函数,将字符串16进制转为十进制,debug下报错,release下可以

炼气士 2011-08-19 08:30:09
证明程序还是有问题,请帮忙看看问题在哪?
int htoi(const char *str)
{
int n=0;
int i,iTemp=0;
int l; // 字符串长度
char * s;

l= strlen(str);
s = (char *)malloc(sizeof(l+1));

strcpy(s,str);

iTemp = 0;

for (i=l;i>iTemp;i--)
{
if (s[i-1]>='0'&&s[i-1]<='9')
{
s[i-1]-=0x30;
}else if (s[i-1]>='A'&&s[i-1]<='F')
{
s[i-1] -= 0x37;
}else if (s[i-1]>='a'&&s[i-1]<='f')
{
s[i-1] -= 0x57;
}else
{
break;
}
}

iTemp = i;
for (i=iTemp;i<l;i++)
{
n = n*16+s[i];
}

free(s);
return n;
}
...全文
77 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
炼气士 2011-08-19
  • 打赏
  • 举报
回复
可以结贴了,是自己犯了错误,将*str 与str[]搞混了,sizeof(str)是指针长度4,
多谢楼上各位
icemornings 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ljd680 的回复:]

原来是写的这样C/C++ code

s = (char *)malloc(sizeof(str));



然后报错的,后来就改成用l,不知道为什么用sizeof(str)却出错了
[/Quote]
你对一个指针用sizeof()干什么?
指针的sizeof()在32位机器上恒为4,int型大多数情况也是4;
炼气士 2011-08-19
  • 打赏
  • 举报
回复
原来是写的这样

s = (char *)malloc(sizeof(str));


然后报错的,后来就改成用l,不知道为什么用sizeof(str)却出错了
炼气士 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 icemornings 的回复:]

s = (char *)malloc(sizeof(l+1));
用sizeof()干什么
sizeof(l + 1) = 4
------------------
4个字节能存放那么多东西么?
[/Quote]

正解,原来里面是指针的,后来改的时候就忘了把sizeof去掉了,
icemornings 2011-08-19
  • 打赏
  • 举报
回复
s = (char *)malloc(sizeof(l+1));
用sizeof()干什么
sizeof(l + 1) = 4
------------------
4个字节能存放那么多东西么?
tianmo2010 2011-08-19
  • 打赏
  • 举报
回复
因为你还用到指针s所占用的空间了,建议新定义一个指针,把s的值赋给这个指针以后,再free(s)
炼气士 2011-08-19
  • 打赏
  • 举报
回复
我自己测试时,发现debug下把最后的free去掉就不报错了。但指针S我除了赋值并未改动过啊,为什么free会报错呢?

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧