我一直在尝试使用不同的函数来验证十六进制字符串,但它们都以分段错误结束。我已经研究了它是什么,它似乎有很多原因可以突然出现错误。
这是功能:
int validate_hex(const char * hex) {
if (&hex[strspn(hex, "0123456789abcdefABCDEF")] == 0)
{
return 0; //edited: "(null)" is printed in console
} else {
return 1; //edited: causes segmentation fault
}
}
以下是它所在的地方:
int main()
{
const char input[4096];
printf("Enter Hexadecimal: ");
scanf("%s", input);
//printf("%s\n", &input);
printf("%d\n", validate_hex(input)); //changing to %d worked Thank you dbush
return 0;
}
任何人帮助解释我没有看到的内容将不胜感激!
提前谢谢。
答案 0 :(得分:1)
函数validate_hex
会返回int
,但您需要使用printf
格式说明符将其传递给%s
,这需要char *
指向空终止字符串。
使用错误的格式说明符导致未定义的行为,在这种情况下表现为崩溃。
将格式说明符更改为%d
,用于打印int
。
printf("%d\n", validate_hex(input));