[问题][已解决]断错误……?

软件和网站开发以及相关技术探讨
回复
头像
lyre
帖子: 77
注册时间: 2005-06-28 18:08

[问题][已解决]断错误……?

#1

帖子 lyre » 2007-07-19 22:05

我照着书写了个程序,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 次。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2007-07-19 22:20

gdb可以调试错误。
如果不熟悉,自己加些阶段性调试的printf。找到大概是那行出错。
段错误,一般都是指针错误。你编译的时候,有警告没?看了没?
● 鸣学
头像
lyre
帖子: 77
注册时间: 2005-06-28 18:08

#3

帖子 lyre » 2007-07-19 23:20

我突然发现循环体中的条件把||当作&&用了……于是出问题了……
回复