gpt4 book ai didi

c - strtol、strtoll、strtod 对任何字符都是安全的,甚至不是以 null 结尾的?

转载 作者:IT王子 更新时间:2023-10-29 00:50:19 31 4
gpt4 key购买 nike

我正在尝试将一些字符转换为数字类型,但其中一些可能不是以 null 结尾的字符串。那么 strtol、strtoll 和 strtod 对于那些不是以 null 结尾的字符串安全吗?

最佳答案

没有。

如果字符数组不是以空字符结尾,则它不是字符串。如果向任何 strto*() 函数传递了一个不指向字符串的参数,则行为未定义。

引用latest draft 2011 ISO C 标准:

7.1.1 Definition of terms:

A string is a contiguous sequence of characters terminated by and including the first null character.

7.1.4 Use of library functions:

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.

7.22.1.3 The strtod, strtof, and strtold functions:

The strtod, strtof, and strtold functions convert the initial portion of the string pointed to by nptr to double, float, and long double representation, respectively.

(强调)

因此,不指向字符串的参数在函数域之外。

如果数组包含类似 { '1', '2', '3', 'x', 'y', 'z' ,因为它不需要扫描终止所需值的 x,但行为是明确未定义的。

如果你想使用这些函数,你应该在必要时将你的数组复制到另一个缓冲区并自己显式地以 null 终止它。

关于c - strtol、strtoll、strtod 对任何字符都是安全的,甚至不是以 null 结尾的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9642752/

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