我目前正在将我们的一个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
如果buffer或 …
我们目前正在从陈旧的专有目录服务迁移到 OpenLDAP。今天我们遇到了ldap_search_ext_s或 ldapsearch 一般不返回任何结果的问题,如果当前搜索要返回的条目数量会达到一定的限制。
不幸的是,在 LDAP 服务器配置中设置更高的大小限制可能只会推迟问题的发生,因为我们有一个非常大的数据库,而且我们每天早上运行的更新机制必须执行大量查询。
在 MSDN 文档中,我注意到有一种机制可以执行分页搜索,这可以让我绕过大小限制。显然这也在1996 年的RFC 草案中指定,但还没有最终确定(还)?
无论如何,因为我不是在 Windows-Box 上工作,所以我必须使用 OpenLDAP API,它似乎没有提供这种机制(至少我在他们的搜索页面上找不到)
这让我想到了我的问题:你知道我能做什么,以优雅的方式解决这个问题吗?
谢谢你的帮助!
我是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) 即使经过我用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)