我在C中测试perror函数,并根据this page在传递空指针时打印一条默认消息:
int main(void)
{
int *p;
perror(p); //crashes
}
答案 0 :(得分:5)
原因int* p
包含随机/垃圾值。
它不是NULL
指针。您需要使用p = NULL;
显式初始化它。
使用未初始化的变量是未定义的行为。
main()
也需要return 0;
。
答案 1 :(得分:1)
因为p
未在C中自动初始化为0(这不是Java)。
int *p = 0;
答案 2 :(得分:1)
将无效指针传递给perror
是未定义的行为。
(C99,7.1.4p1)“以下每个陈述均适用,除非在下面的详细说明中另有明确说明:如果函数的参数具有无效值(例如函数域外的值,或者指针在程序的地址空间之外,或者是空指针,或指向不可修改的存储器时的对应 参数不是const限定的)或函数不期望的类型(提升后) 对于可变数量的参数,行为是未定义的。“