初学者问一个C语言问题

youyidai 2007-03-26 11:12:48
把十六进制数字组成的字符串转化为与之等价的整型值
#include <stdio.h>
#define YES 1
#define NO 0
int htoi(char *s)
{
int hexdigit,i=0,inhex,n;
if(s[i]=='0')
{
++i;
if(s[i]=='x'||s[i]=='X')
++i;
}
n=0;
inhex=YES;
for( ;inhex=YES;++i)
{
if(s[i]>='0' && s[i]<='9')
hexdigit=s[i]-'0';
else if(s[i]>='a'&&s[i]<='f')
hexdigit=s[i]-'a'+10;
else if(s[i]>='A'&&s[i]<='F')
hexdigit=s[i]-'A'+10;
else
inhex=NO;
if(inhex==YES)
n=16*n+hexdigit;
}
return n;
}
main()
{
char *s="oxc6f";
printf("%d",htoi(s));
}
运行时说应用内存错误,请问各位大侠,这是什么问题
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
youyidai 2007-03-26
  • 打赏
  • 举报
回复
太谢谢了,我看了一个早上,调试了半天也看不出来,果然这里的强人多!散分了
iu_81 2007-03-26
  • 打赏
  • 举报
回复

for( ;inhex==YES;++i)
=====================
for( ;inhex=YES;++i)
iu_81 2007-03-26
  • 打赏
  • 举报
回复
for(i=2;i<strlen(s);++i)
=============================
for( ;inhex=YES;++i)
youyidai 2007-03-26
  • 打赏
  • 举报
回复
字符串的最后一个字符时'\0',这样的话读到这里
else
inhex=NO;

inhex=NO
跳出for循环了,我这样理解对嘛
silenceburn 2007-03-26
  • 打赏
  • 举报
回复
第一个错 inhex=YES 应为 inhex == YES
第二个错 char *s="oxc6f"; 正确的输入应为char *s="0xc6f";

初学都这样,写个几千行以后就好了:)
PS,把inhex ==YES 习惯性写为 YES==index就不会老犯这个错了
www_adintr_com 2007-03-26
  • 打赏
  • 举报
回复
你没考虑字符串会结束的。

69,335

社区成员

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

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