gpt4 book ai didi

c++ - 使用 sscanf 解析字符串好吗

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:36 25 4
gpt4 key购买 nike

我一直在我的解析器中使用 sscanf() 来获取一些 css 之类的标记,例如下面的一些变体颜色代码;

#FDC69A
#ff0
orange

示例代码将是;

int r g b;
cosnt char* s = "#FAFAFA";
if(sscanf(s, "#%02x%02x%02x", &r, &g, &b) == 3){
// color code ok
}

我当前项目的首选语言是 c++,我认为 sscanf 可以比按字符解析的常规字符更快,并且整体代码将没有错误且最少,但它可能在不同的编译器之间存在可移植性问题。

我注意到的一件事是,流行的开源项目不使用 sscanf 来标记输入缓冲区,而是逐个字符地进行标记,在我所关注的解析中使用 sscanf 是一种糟糕的编程实践?

最佳答案

sscanf(以及scanffscanf)的最大问题是数字溢出会导致未定义的行为。例如:

const char *s = "999999999999999999999999999999";
int n;
sscanf(s, "%d", &n);

C 标准完全没有说明这段代码的行为方式。它可能会将 n 设置为某个任意值,可能会报告错误,也可能会崩溃。

(在实践中,对于“明智”的某些值,现有的实现可能会表现得明智。)

关于c++ - 使用 sscanf 解析字符串好吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24988413/

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