strdup(null) 转储核心。
在 ubuntu 和 freeBSD 上都尝试过。
为什么?不是应该返回 null 吗?
char *b = NULL;
a = strdup(b);
这将在 strdup 调用上转储核心。
那还可以。
文档暗示其参数必须是字符串。如果是其他东西,例如空指针,那么任何人都可以猜测会发生什么。本质上,当将 NULL
指针传递给
strdup
时,您会得到未定义的行为。如果您向函数传递了不应该传递的内容,则函数产生未定义的行为是很正常的。许多标准 C 函数(例如
strcpy
和
strlen
)也不接受空指针。
预期的行为。