strcasecmp NULL 参数;man strcasecmp

pou*_*ler 4 c string

我做了一个 sigsegved 的小程序,strcasecmp直到我做了这个测试用例才知道为什么:

strcasecmp(NULL, "TEST"); 
Run Code Online (Sandbox Code Playgroud)

编译时,它给了我以下警告:

test.c:9:4: warning: null argument where non-null required (argument 1) [-Wnonnull]
Run Code Online (Sandbox Code Playgroud)

但是,man strcasecmp没有说任何关于NULL论点的内容,有人可以解释一下我如何从理论上从阅读文档中推断出这一点,而不是凭经验编写测试用例吗?它是根深蒂固的标准吗?或者也许const char *没有权利成为NULL,出于某种我不知道的原因?

Dav*_*ave 5

没有人真正解释过为什么会这样。

未定义的行为。为什么?

除非在随后的详细说明中另有明确说明,否则以下每个语句都适用: 如果函数的参数具有无效值(例如函数域之外的值,或程序地址空间之外的指针,或者一个空指针,或者一个指向不可修改存储的指针,当相应的参数不是 const 限定的)或一个类型(提升后)不是具有可变数量参数的函数所期望的,行为是未定义的。

(C 标准,7.1.4)

由于 strcasecmp 从未提及 NULL,因此它在函数的域之外。因此,该功能可以随心所欲。包括崩溃。

(注意:我的来源是这个相关的答案:https : //stackoverflow.com/a/12621203/1180785