如果第三个参数为零,将NULL指针作为strncmp
的参数是安全的吗?例如,如下调用:
strncmp(NULL, "foo", 0);
如果第三个参数为零,将NULL指针作为strncmp
的参数是安全的吗?例如,如下调用:
strncmp(NULL, "foo", 0);
这是一种未定义的行为。
C标准通常规定,不应向库函数传递无效指针。
引用《C11》第7.24.1章“字符串函数约定”(强调我的)
对于一个函数,如果声明为
size_t n
类型并指定了数组长度,则在调用该函数时,n
可以具有零值。 除非在本子句中某个特定函数的描述中明确说明,否则在此类调用上的指针参数仍然应具有有效值,如7.1.4所述。在此类调用上,定位字符的函数找不到出现,比较两个字符序列的函数返回零,而复制字符的函数会复制零个字符。
我没有看到在7.24.4.4,strncmp()
函数中有任何特定提及(作为前述约束的例外)。
NULL
,引用§7.19,<stddef.h>
:NULL
扩展为实现定义的空指针常量;[...]」