c - 为什么会出现分段错误



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

这是函数:

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

相关内容

  • 没有找到相关文章

最新更新