为什么会出现分段错误?

时间:2017-02-11 04:04:36

标签: c segmentation-fault

我一直在尝试使用不同的函数来验证十六进制字符串,但它们都以分段错误结束。我已经研究了它是什么,它似乎有很多原因可以突然出现错误。

这是功能:

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;
}

任何人帮助解释我没有看到的内容将不胜感激!

提前谢谢。

1 个答案:

答案 0 :(得分:1)

函数validate_hex会返回int,但您需要使用printf格式说明符将其传递给%s,这需要char *指向空终止字符串。

使用错误的格式说明符导致未定义的行为,在这种情况下表现为崩溃。

将格式说明符更改为%d,用于打印int

printf("%d\n", validate_hex(input));