我遇到了将代码库从 linux (gcc) 移植到 windows (msvc) 的问题。似乎 C99 函数 vsscanf 不可用并且没有明显的替代品。
我已经阅读了使用内部函数 _input_l 并静态链接到 crt 运行时的解决方案,但不幸的是我无法静态链接,因为它会干扰应用程序加载的所有插件(作为 dll)。
那么是否有任何替代品或一种为 vsscanf 编写包装器的方法?
更新 2016-02-24 :
当第一次被问到时,没有原生替代品,但从那时起,MSVC 已经实现了对此的支持以及更多。
vsscanf
和 friend 。 最佳答案
一个应该有效的黑客:
int vsscanf(const char *s, const char *fmt, va_list ap)
{
void *a[20];
int i;
for (i=0; i<sizeof(a)/sizeof(a[0]); i++) a[i] = va_arg(ap, void *);
return sscanf(s, fmt, a[0], a[1], a[2], a[3], a[4], a[5], a[6], /* etc... */);
}
将 20 替换为您认为可能需要的最大参数数。这段代码的可移植性不是很强,但它仅用于一个特定的损坏系统,缺少
vsscanf
,所以应该没有太大关系。