我有一个函数,它会进行一系列调用sscanf()
,然后在每次调用之后更新字符串指针以指向第一个未被使用的字符,sscanf()
如下所示:
if(sscanf(str, "%d%n", &fooInt, &length) != 1)
{
// error handling
}
str+=length;
为了清理它并避免重复多次,我想将其封装成一个不错的实用程序函数,如下所示:
int newSscanf ( char ** str, const char * format, ...)
{
int rv;
int length;
char buf[MAX_LENGTH];
va_list args;
strcpy(buf, format);
strcat(buf, "%n");
va_start(args, format);
rv = vsscanf(*str, buf, args, &length); //Not valid but this is the spirit
va_end(args);
*str += length;
return rv;
}
然后我可以简化如下调用以删除额外的参数/簿记:
if(newSscanf(&str, "%d", &fooInt) != 1)
{
// error handling
}
不幸的是,我找不到将&length
参数直接附加到 arg 列表末尾或以其他方式在newSscanf()
. 有没有办法解决这个问题,或者我是否也可以在每次通话时手动处理簿记?