我有一个函数,它会调用一系列的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
}
很遗憾,我找不到一种直接或间接在newSscanf()
内部将&length
参数附加到参数列表末尾的方法。有没有什么办法可以解决这个问题,或者我最好在每次调用时手动处理记录?