我有一个函数可以从服务器获取多个 X.509
证书。我希望它在 OpenSSL 的 X509 *
结构中“返回”这些证书的数组。但由于我的接口(interface)返回错误代码,我想使用 out 参数。
如果我没有误导的话,这将需要我使用带有 3(!) *
的指针(例如 X509 ***certs
)。我来这里是因为我个人觉得这非常令人困惑。这是我计划做的事情,我想知道我是否完全走错了路(在我看来):
int get_certs(X509 ***certs)
{
X509 **local_certs;
int i;
local_certs = malloc(no_of_certs * sizeof(X509 *));
// fetch certs
for(i=0; i < no_of_certs; ++i)
{
// load single cert into variable "cert"
local_certs[i] = cert
}
*certs = local_certs;
}
调用可能如下所示:
X509 **certs;
get_certs(&certs);
这是正确的方法吗?因为对我来说这个三指针看起来很奇怪。
注意:我不知道会有多少个证书,所以它必须是一个动态数组。
最佳答案
只需应用从右到左的读取规则... X509 ***certs
意味着 certs 是一个指向 X509 指针的指针。因此,如果您想向调用者返回 X509**
,调用者需要向您传递一个 X509***
供您存储。
另外,我不确定您处理单个证书的逻辑是否正确......它应该看起来像这样(imo) - 请注意 for 循环内的额外 malloc。
int get_certs(X509 ***certs)
{
X509 **local_certs;
int i;
local_certs = malloc(no_of_certs * sizeof(X509 *));
// fetch certs
for(i=0; i < no_of_certs; ++i)
{
X509* cert = malloc( sizeof( X509 ) );
// load single cert into variable "cert"
local_certs[i] = cert
}
*certs = local_certs;
}
另一种方法是从函数返回 X509**
...
X509** get_certs( int no_of_certs )
{
X509 **local_certs;
int i;
local_certs = malloc(no_of_certs * sizeof(X509 *));
// fetch certs
for(i=0; i < no_of_certs; ++i)
{
X509* cert = malloc( sizeof( X509 ) );
// load single cert into variable "cert"
local_certs[i] = cert
}
return local_certs;
}
关于c - 输出参数中带有指向对象的指针的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16002390/