我一直在尝试不同的函数来验证十六进制字符串,但它们都以分段错误结尾。我已经研究了那是什么,似乎有很多原因可以弹出错误。
这是函数:
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("%sn", &input);
printf("%dn", validate_hex(input)); //changing to %d worked Thank you dbush
return 0;
}
任何人帮助解释我没有看到的内容将不胜感激!
提前谢谢你。
该函数validate_hex
返回一个int
,但是您将其传递给带有%s
格式说明符的printf
,该说明符需要指向以 null 结尾的字符串的char *
。
使用错误的格式说明符会导致未定义的行为,在这种情况下表现为崩溃。
将格式说明符更改为 %d
,用于打印int
。
printf("%dn", validate_hex(input));