将空字符串赋给C标准函数会发生什么?

JXG*_*JXG 2 c string null std

C标准库中有许多可爱的字符串函数,例如(in string.h)

char *strcat(char *str1, const char *str2);
Run Code Online (Sandbox Code Playgroud)

或(在stdlib.h)

long int strtol(const char *nptr, char **endptr, int base);
Run Code Online (Sandbox Code Playgroud)

(出于这个问题的目的,忽略调用这些函数的智慧.)

如果我将这些函数中的任何一个传递给NULL指针会发生什么?(我的意思是(char *) 0,不是空字符串.)

我在手册页或网页上找不到任何答案.

这使我认为它是实现定义的,但它也可能意味着自动分段错误; 也没有指定特殊的错误行为或返回值.

在同一个实现中,行为甚至会因功能而异吗?

Ale*_*nze 7

C标准在7.21.1字符串函数约定中表示,第2节:

除非在本子条款中对特定函数的描述中另有明确说明,否则此类调用上的指针参数仍应具有有效值,如7.1.4中所述.

7.1.4库函数的使用:

如果函数的参数具有无效值(例如函数域外的值,或程序地址空间外的指针,或空指针,或指向不可修改存储的指针,则相应参数不具有const限定条件)或具有可变数量参数的函数不期望的类型(提升后),行为未定义.

strcat()7.21.3.1中的描述没有说明NULL指针是一个有效的输入,因此,我得出结论,如果任何输入指针为NULL,则行为正式未定义.