gpt4 book ai didi

c - 在 C 语言中,什么是 sscanf 的安全替代品?

转载 作者:太空狗 更新时间:2023-10-29 15:13:28 29 4
gpt4 key购买 nike

我在网上发现在 C++ 中有一个替代方案,但是普通的 C 呢?我很感激任何提示或建议。

最佳答案

这取决于你想用它做什么。

既然你有内存中的字符串,你可以通过小心你传递的参数来安全地避免缓冲区溢出。例如,如果您使用 "%s" 扫描到一个字符串中,只需使用一个足够大的目标缓冲区来容纳可能存在的最大字符串(并确保源缓冲区是一个有效的字符串,即它以 '\0' 结尾)。

所有 *scanf() 函数的一个危险是,如果您正在扫描一个数值,并且输入值太大而无法在目标类型中表示,则行为是未定义的.例如这个程序:

#include <stdio.h>
int main(void) {
const char *s = "999999999999999999999999999";
int n;
sscanf(s, "%d", &n);
printf("n = %d\n", n);
return 0;
}

有未定义的行为(除非 INT_MAX 真的很大)。

您可以使用 strto*() 函数安全地扫描数值:strtol()strtoll()strtoul (), strtoull(), strtof(), strtod(), strtold() .他们对错误的行为有点棘手,但至少定义明确。

关于c - 在 C 语言中,什么是 sscanf 的安全替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245682/

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