gpt4 book ai didi

c - 如何在不使用 vsscanf() 的情况下为 C sscanf() 实现包装函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:42 24 4
gpt4 key购买 nike

我想在不使用 vsscanf 的情况下为 C sscanf 实现一个包装函数,因为在我的环境中 vsscanf() 不仅存在 sscanf 在那里。我不想对 sscanf 进行完整的实现,因为为此我需要考虑所有可能的情况。我看过一些samples在谷歌,但它并没有考虑所有的场景。

所以现在我想像下面这样实现:

int my_sscanf(char * buf, char format[], ...)
{
va_list vargs = {0};
va_start(vargs, format);

//some loop to get the variable aguments
//and call again sscanf() here.

va_end (vargs);
}

最佳答案

哎呀!这是一把锤子;用它敲自己的头会更有趣。说真的,这是一个不平凡的命题。

您需要一个循环来扫描格式字符串,当字符是普通字符时从缓冲区中读取字符,记住格式中的空格占用缓冲区中的零个或多个空格。当您遇到转换规范时,您需要创建一个单例格式字符串,其中包含用户提供的转换规范以及一个 %n 转换规范。您将调用:

int pos;
int rc = sscanf(current_pos_in_buf, manufactured_format_with_percent_n,
appropriate_pointer_from_varargs, &pos);

如果 rc 不为 1,您将失败。否则,您使用存储在 pos 中的值更新缓冲区中的当前位置,然后重复。请注意,扫描转换规范并非易事。此外,如果规范中存在抑制赋值的 *,您将不得不期望从 sscanf() 返回 0(并且不提供来自可变参数)。

关于c - 如何在不使用 vsscanf() 的情况下为 C sscanf() 实现包装函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298091/

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