c - ldap_init 和 ldap_set_option 问题

标签 c windows ldap

我在使用一些 wldap32.lib 函数时遇到了一些问题。 代码

#include "winldap.h"

LDAP Connect;
Connect = *(ldap_init(...));

1) 合法吗?看来是这样,因为我的结构与我使用此代码得到的结构相同

LDAP *pConnect;
Connect = ldap_init(...);

2)下一步

ldap_set_option(&Connect, LDAP_OPT_PROTOCOL_VERSION, (void*)&version));

返回 89 代码。

但是使用

ldap_set_option(pConnect, LDAP_OPT_PROTOCOL_VERSION, (void*)&version));

成功

最佳答案

对于 (1),它是有效的 C,只是不适用于 API。

LDAP winldap.h中暴露的结构只是 LDAP 的用户可观察元素结构。该库完全有权返回一个指向比向用户公开的结构大得多的结构的指针。因此,当您执行结构体赋值时,只有您知道的元素才会被复制,而其余的内存将会丢失。

因此,当您尝试使用这个现已被截断的结构副本时,您会得到 89错误代码。

此外,您无法知道 ldap_init 是否函数失败 - 当失败时它返回 NULL指针,在这种情况下你的程序就会死掉

关于c - ldap_init 和 ldap_set_option 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507723/

相关文章:

python - Windows 上的 gevent TCP 服务器

windows - 选择哪些应用程序在 Windows 中将 VOIP 通话中的所有其他声音静音

windows - 如何在 Windows 上刷新 console.log 输出

ldap - 如何在 LDAP 中使用同一电子邮件地址创建多个联系人?

memory-leaks - System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity 的奇怪问题

c - 我的 IF 条件表现得很奇怪,HELP C

c - 这个 C int 函数在没有 return 语句的情况下如何工作?

开罗链接导致内存泄漏

java - 从 LDAP 获取经理的电子邮件 ID?

c - 在C中解ÿ文件尾