小编lx.*_*lx.的帖子

Unix到Windows:替代vsnprintf来确定长度?

我目前正在将我们的一个Linux库的代码转换为Windows DLL.

在这个库中,我有一个函数,它以printf方式获取最后一个参数(格式字符串,然后是省略号).在这个函数中,我使用vsnprintf格式化提供的参数.因为我想知道我是否可以将最终字符串塞入一个小缓冲区,或者如果我必须为它分配内存,我有兴趣确定格式化字符串的"将是长度".

要做到这一点,我目前正在使用这样的vsnprintf(显然是组成示例代码):

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

void foo(const char* fmt, ...)
{
   int len = 0;
   va_list ap;

   va_start(ap, fmt);
   len = vsnprintf(0, 0, fmt, ap);
   printf("len = %d\n", len);
   va_end(ap);
}

int main(void)
{
   foo("12345%s", "67890");
   exit(0);
}
Run Code Online (Sandbox Code Playgroud)

Open Group Base Specifications Issue 6涵盖了此用法:

vsnprintf(char*restrict s,size_t n,const char*restrict format,va_list ap)

[...] vsnprintf()[...]函数应等同于[...] snprintf().

snprintf(char*restrict s,size_t n,const char*restrict format,...)

如果在调用snprintf()时n的值为零,则不应写入任何内容,已写入的字节数n必须足够大,不包括终止空值,并且s可以是空指针.

当我使用/ analyze on在Windows系统(Visual Studio 2010)上编译此代码时出现问题.编译器/分析器给了我以下内容:

test.c(11):警告C6309:参数'1'为空:这不符合'vsnprintf'的函数规范

test.c(11):警告C6387:'参数1'可能是'0':这不符合函数'vsnprintf'的规范:行:7,8,10,11

快速浏览一下vsnprintfMSDN条目给了我:

如果buffer或 …

c windows visual-studio-2010

11
推荐指数
1
解决办法
7016
查看次数

在 OpenLDAP 中分页 ldap_search 以绕过大小限制?

我们目前正在从陈旧的专有目录服务迁移到 OpenLDAP。今天我们遇到了ldap_search_ext_s或 ldapsearch 一般不返回任何结果的问题,如果当前搜索要返回的条目数量会达到一定的限制。

不幸的是,在 LDAP 服务器配置中设置更高的大小限制可能只会推迟问题的发生,因为我们有一个非常大的数据库,而且我们每天早上运行的更新机制必须执行大量查询。

在 MSDN 文档中,我注意到有一种机制可以执行分页搜索,这可以让我绕过大小限制。显然这也在1996 年RFC 草案中指定,但还没有最终确定(还)?

无论如何,因为我不是在 Windows-Box 上工作,所以我必须使用 OpenLDAP API,它似乎没有提供这种机制(至少我在他们的搜索页面上找不到)

这让我想到了我的问题:你知道我能做什么,以优雅的方式解决这个问题吗?

谢谢你的帮助!

c ldap openldap

5
推荐指数
1
解决办法
3419
查看次数

将WPF按钮设置为在IConnectionPoint事件处理程序中可见

我是C#和WPF编程的新手,现在这个问题令我头疼.

程序应该做什么:程序显示一个带有文本框的欢迎屏幕,客户可以在其中输入他的名字.如果设备靠近无线局域网接入点并成功连接,则此主窗口上的"开始"按钮应该可见.

什么不起作用:在事件处理程序中设置按钮可见性.新样式不适用.此外,如果我在设置可见性属性/属性(?)后尝试调用任何其他代码,它将不会运行(如果我在设置visib之前将MessageBox.Show设置为右.如果我在设置之后放置它,它将会显示该属性,甚至不再达到此代码).

代码:

这是按钮元素:

<Button Height="72" HorizontalAlignment="Center" Margin="319,507,315,0"
        Name="buttonStart" VerticalAlignment="Top" Width="168" FontSize="32"
        Content="Los geht's" Click="buttonStart_Click" />
Run Code Online (Sandbox Code Playgroud)

这是MainWindow.xaml.cs中的事件处理程序注册

public partial class MainWindow : Window, INetworkListManagerEvents
{
    private INetworkListManager nlm_;
    private IConnectionPoint nlmICP_;
    private int nlmCookie_ = 0;

    private void InitNetManager()
    {
        nlm_ = new NetworkListManager();
        IConnectionPointContainer icpc = (IConnectionPointContainer)nlm_;
        Guid tempGuide = typeof(INetworkListManagerEvents).GUID;
        icpc.FindConnectionPoint(ref tempGuide, out nlmICP_);
        nlmICP_.Advise(this, out nlmCookie_);
    }
Run Code Online (Sandbox Code Playgroud)

最后,事件处理程序:

    public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
    {
        if (newConnectivity == NLM_CONNECTIVITY.NLM_CONNECTIVITY_DISCONNECTED ||
            ((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_NOTRAFFIC) != 0)
        { …
Run Code Online (Sandbox Code Playgroud)

c# wpf iconnectionpoint c#-4.0

2
推荐指数
1
解决办法
9337
查看次数

Div"默认利润"无处不在

即使经过我用css和html编写的许多行之后,css行为仍然让我感到惊讶 - 这是一种糟糕的方式.

我正在为一个朋友组建一个示例网站,向他展示如何构建他的布局,但Firefox 3.0.5和IE8在我的#header,#content和#footer-div之间创造了边缘.如果我在IE7模式下切换,边距消失.

CSS:

html, body {
   background-color: #fff;
   margin: 0;
   padding: 0;
   width: 100%;
}

#page {
   background-image: url('bg_gradiant.png');
   background-repeat: repeat-y;
   width: 950px; /* 770px + 2 * 90px; */
   margin: 0 auto;
   padding-left: 90px;
}

#header {
   width: 770px;
   margin: 0;
   padding: 0;
}

#header #row1 {
   background-color: #9ab3ba;
   height: 50px;
}
#header #row2 {
   background-color: #517279;
   height: 50px;
}

#content {
   width: 770px;
   background-color: #d7e9ed;
}

#footer {
   background-color: #5eb6cc;
   width: 770px;
   height: 150px;
} …
Run Code Online (Sandbox Code Playgroud)

html css margin

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×2

c# ×1

c#-4.0 ×1

css ×1

html ×1

iconnectionpoint ×1

ldap ×1

margin ×1

openldap ×1

visual-studio-2010 ×1

windows ×1

wpf ×1