【发布时间】:2022-12-11 04:46:33
【问题描述】:
我试图弄清楚如何调用从 Swift 写入指针的可变参数 C 函数,例如 vsscanf,但我不明白如何实际构造指向 Swift 变量的指针列表。
我认为如果我有一个字符串,我可以获得一个 UnsafePointer<CChar> 并在其上调用 vsscanf,但是......我如何告诉它实际写入数据的位置?我如何构建 CVaListPointer 以传递给 vsscanf?
var a: Int
var b: Float
"(5, 3.14)".withCString{buffer in
let r = vsscanf(buffer, "(%d, %f)", /* how do I put a and b here? */)
}
基本上,做与此处相同的事情 (C):
#include <stdio.h>
#include <stdarg.h>
int parse(const char *buffer, char *format, ...)
{
va_list args;
va_start(args, format);
int result = vsscanf(buffer, format, args);
va_end(args);
return result;
}
int main(int argc, char const *argv[])
{
int a;
float b;
char s[] = "(5, 3.14)";
int r = parse(s, "(%d, %f)", &a, &b);
printf("a: %d, b: %f\n", a, b);
// "a: 5, b: 3.140000"
return 0;
}
【问题讨论】: