gpt4 book ai didi

c - 当你给一个 C 标准函数一个空字符串时会发生什么?

转载 作者:行者123 更新时间:2023-12-01 14:01:07 24 4
gpt4 key购买 nike

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

char *strcat(char *str1, const char *str2);

或(在stdlib.h中)

long int strtol(const char *nptr, char **endptr, int base);

(忽略调用这些函数的智慧,为了这个问题的目的。)

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

我没有在手册页或网络上找到任何答案。

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

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

最佳答案

C 标准在 7.21.1 String Function Conventions, clause 2 中说:

Unless explicitly stated otherwise in the description of a particular function in this subclause, pointer arguments on such a call shall still have valid values, as described in 7.1.4.

7.1.4 库函数的使用:

If an argument to a function has an invalid value (such as a value outside the domain of the function, or a pointer outside the address space of the program, or a null pointer, or a pointer to non-modifiable storage when the corresponding parameter is not const-qualified) or a type (after promotion) not expected by a function with variable number of arguments, the behavior is undefined.

strcat()7.21.3.1 中的描述没有说明 NULL 指针是有效输入,因此,我得出结论,如果有的话,该行为是官方未定义的它的输入指针是 NULL。

关于c - 当你给一个 C 标准函数一个空字符串时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8325145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com