当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题][已解决]断错误……?
帖子发表于 : 2007-07-19 22:05 
头像

注册: 2005-06-28 18:08
帖子: 77
送出感谢: 0 次
接收感谢: 0 次
我照着书写了个程序,gcc编译通过,但是运行时提示断错误……不知道是什么原因

这程序其实是《c程序设计语言》P37,练习2.3

引用:
编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~~9、 a~~f 以及A~~F。


htoi()函数是从习题解答上抄的(包括头文件的两个define),main()是自己写来测试的。

程序代码如下:
代码:
#include <stdio.h>
#define YES 1
#define NO 0

int htoi(char s[])
{
   int hexdigit, i, inhex, n;

   i = 0;
   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()
{
   printf("%d\n",htoi("32"));
   return 0;
}


出错提示
代码:
lyre@linux-4179e1:~/c> gcc t2.3.c -o t2.3.c.o
lyre@linux-4179e1:~/c> ./t2.3.c.o
段错误
lyre@linux-4179e1:~/c>


请问有谁知道这是什么问题么?
不排除htoi()函数抄错了,或者main()函数有问题= =


最后由 lyre 编辑于 2007-07-19 23:23,总共编辑了 3 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-07-19 22:20 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
gdb可以调试错误。
如果不熟悉,自己加些阶段性调试的printf。找到大概是那行出错。
段错误,一般都是指针错误。你编译的时候,有警告没?看了没?


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-07-19 23:20 
头像

注册: 2005-06-28 18:08
帖子: 77
送出感谢: 0 次
接收感谢: 0 次
我突然发现循环体中的条件把||当作&&用了……于是出问题了……


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
cron
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译