gpt4 book ai didi

c - vsscanf 读取长度

转载 作者:行者123 更新时间:2023-11-30 17:57:14 25 4
gpt4 key购买 nike

我需要的是:

1) 像 sscanf 一样从字符串中读取2) 测量处理序列的长度,就像 sscanf 使用“%n”一样3) 接受上面的 format 和其他参数(无法控制它)

有办法吗?

size_t read = 0; //Accumulator of the length of processed characters

void readfn (char* source_string, char* fmt, va_list args)
{
int length;

size_t fmtlen = strlen(fmt);

char* fmt_and_lenght = (char*)realloc(fmt, fmtlen + 3);

fmt_and_length[fmtlen] = '%';
fmt_and_length[fmtlen + 1] = 'n';
fmt_and_length[fmtlen + 2] = '\0';

va_list args_and_length = va_append(args, length); //here is the problem, i need to add &length to the list (i dont care if the list is created from scretch

vsscanf(source_str, fmt_and_length, args_and_length); //here i finally capture the length of processed string

read += length; //and i do whatever i wanted to do with it
}

即使 fmt 不包含“%n”并且参数列表之前没有捕获它,它也会简单地计算消耗的字符数?

编辑:如果有 vsnscanf 或者它应该有什么名称,这肯定会更好,这样可以获取已处理的字符数。但我通过将格式字符串按未转义的 % 拆分来解决了这个问题。如果后面没有 *,我会获取一个参数,并迭代地处理所有参数,每次我添加“%n”,最后我会总结长度。

最佳答案

没有可移植的方法来做到这一点。我建议您重构代码,这样您就根本不需要这样做。您也许可以用 ffcall library 拼凑一些东西。 ,但它会变得困惑且脆弱。

关于c - vsscanf 读取长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943449/

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