strdup转储核心传递NULL

| strdup(null)转储核心。 在ubuntu和freeBSD上都尝试过。 为什么?它不应该返回null吗?
char *b = NULL;
a = strdup(b);
这将在strdup调用中转储核心。     
已邀请:
        没关系。 文档暗示它的参数必须是字符串,如果它是其他内容(例如空指针),则任何人都将猜测会发生什么。本质上,将NULL指针传递给strdup时会得到不确定的行为。 如果将不希望的行为传递给函数,则函数产生不确定的行为是很正常的。许多标准的C函数,例如strcpy,strlen也不接受空指针。     
        如果分配失败,“ 1”将返回NULL。 这不是分配失败。传入野生指针时的行为是不确定的。您需要传递一个指向NUL终止的字符串的有效指针。     
        我认为这是预期的行为。     
        当然,所有答案都是正确的。尽管如此,在strdup()的情况下,最好也能够处理空指针-在这种情况下,只需返回\“ null \”字符串即可。当然,很容易定义具有这种行为的strdupnullok()函数作为strdup()的包装器,但是这是一个附加的包装器和函数调用,因此使代码稍微慢一点。     

要回复问题请先登录注册