如何解决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()的包装器,但是这是一个附加的包装器和函数调用,因此使代码稍微慢一点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。