小编par*_*cle的帖子

有没有办法只读标记一块已分配的内存?

如果我分配一些内存使用malloc()是否有一种方法来标记它只读.因此,如果有人试图写入memcpy()会失败吗?

这与错误的api设计有关,用户错过了使用由GetValue()大型内存结构的一部分的方法返回的const指针 .由于我们希望避免复制大块内存,因此我们将实时指针返回到具有特定格式的结构化内存中.现在的问题是,有些用户通过直接写入这个内存来找到hack来实现工作,并避免使用SetValue()调用来进行分配并正确处理我们开发的内存二进制格式.虽然有时会破解工作,但有时它会因为用户已覆盖的控制标志的错误解释而导致内存访问冲突.

教育用户是一项任务,但我们现在要说,我们希望代码失败.

我只是想知道我们是否可以简单地防止这种情况.

为了类比,假设有人从sqlite语句中获取blob列,然后回写它.虽然在sqlite的情况下,它没有意义,但在我们的情况下这有点讨厌.

c c++ malloc memory-management heap-corruption

48
推荐指数
3
解决办法
7808
查看次数

子控件中的`DesignMode`设置不正确?

我有一个复合控件包含嵌套控件.我面临的问题是控制从全局设置类中读取属性,该属性是从设置文件读取的静态和实习.为了阻止个人控制在设计模式下访问配置,我添加了每个控件的检查.

If(!DesignMode){
    ...
    //Initialize properties e.g. prop = AppConfig.GetProperty("prop1");
}
Run Code Online (Sandbox Code Playgroud)

问题是个人控制在VS中打开时工作正常.但是当我打开包含嵌套控件的顶级控件时,我会得到VS设计师的错误.错误是DesignMode=false由于某种原因在嵌套控件中.

我还创建了一个测试应用程序,并在另一个控件中创建了一个简单的控件来测试VS是否存在问题,但它似乎可以正确地用于任何控件深度.

我甚至不知道如何调试这个.现在我注释掉属性初始化代码并构建它然后打开设计器然后取消注释并再次构建它来运行它.

有没有人遇到过这个问题,或者有什么方法可以解决它.

.net c# visual-studio-2008

12
推荐指数
1
解决办法
3623
查看次数

如何将ac字符串转换为c中的转义版本?

是否存在任何构建函数或替代简单快速的转义C字符数组,如果与例如一起使用,printf应该再次产生原始字符数组.

char* str = "\tHello World\n";
char* escaped_str = escape(str); //should contain "\tHello World\n" with char \ ,t.
printf(escaped_str); //should print out [TAB]Hello World[nextline] similar to if str was printed.
Run Code Online (Sandbox Code Playgroud)

c中是否有一种简单的方法来转义带有c转义字符的字符串.

更新

我有缓冲区包含一个带转义字符的字符串.我想要包含在C文件中.为此,我需要逃避它,以便它可以被遵守.我只需要知道是否有简单的方法来做它而不是扫描缓冲区\n \n等,并生成c escape字符.

for(int i=0; i< strlen(buffer);i++)
    if(buffer[i]=='\n')
      sprintf(dest,"\\n")
    else ....
Run Code Online (Sandbox Code Playgroud)

更新2

我写了这个函数.它工作正常.

char* escape(char* buffer){
    int i,j;
    int l = strlen(buffer) + 1;
    char esc_char[]= { '\a','\b','\f','\n','\r','\t','\v','\\'};
    char essc_str[]= {  'a', 'b', 'f', 'n', 'r', 't', 'v','\\'};
  char* dest  =  (char*)calloc( l*2,sizeof(char));
    char* …
Run Code Online (Sandbox Code Playgroud)

c

10
推荐指数
1
解决办法
8094
查看次数

如何以编程方式填写pdf文件?

有哪些技术可以使用外部数据自动填充pdf表单并保存.我必须使用数据库中的数据来填充模板pdf,并使用该数据将其副本保存在磁盘上.语言和平台不是问题,但如果它可以在Windows和Linux上运行会很好.

任何人都可以指导我完成它或指向任何可能有用的文章.

pdf pdf-generation pdf-form

8
推荐指数
2
解决办法
9931
查看次数

OpenFileDialog在Windows 7中不显示完整的文件名

OpenFileDialog在Windows 7中未显示完整的文件名.还会报告connect.microsoft.com的问题.

设置还有一个工作openFileDialog.AutoUpgradeEnabled = false.但这会导致旧的xp样式对话框.有没有办法解决它而不做上述解决方法.对话框中没有窗口句柄,所以我无法弄清楚如何添加自定义窗口消息处理程序来执行sendmessage()来修复它.

        using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
            openFileDialog.FileName = "abcdefghijklmnopqrstuvwxyz";
            openFileDialog.ShowDialog();
            }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

.net c# openfiledialog windows-7

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

我们可以在Windows中更改事件路由策略吗?

在.NET窗口窗体中,窗体具有控件集合,并且在内部所有这些窗口都是由Microsoft窗口提供的窗口子系统.有点类似于MFC,它是窗口api周围的浅包装.窗体/窗口中的控件创建树结构,叶节点接收事件,例如MouseMove事件将直接通过鼠标下方的窗口/控件接收.

但在演示框架中,microsoft提供了RoutedEvent,它可以具有以下策略之一

  1. 隧道路由事件使用隧道策略,事件实例在树中从根到源元素向下路由.
  2. 冒泡 路由事件使用冒泡策略,其中事件实例通过树向上路由,从事件源到根.
  3. 直接 路由事件不通过元素树进行路由.

我的猜测是,表示框架只创建一个主窗口,并为子元素自己绘制图形以支持事件路由策略

现在我可以在普通的窗口形式中更改此策略.我想要隧道泡泡,目前窗口系统使用Direct.我希望它接收MouseEnter/MouseLeave事件,即使它上面有控件.一种方法是全球鼠标/键盘钩.但是,我想避免这种情况.

.net window winforms

3
推荐指数
1
解决办法
1376
查看次数

如何告诉野牛生成parser.cpp和parser.h文件而不是parser.cpp和parser.hpp?

我正在使用以下命令

bison.exe -v -d -l -pTPZyy -bTpz -o %ParserDir%\parser.cpp %ParserDir%\parser.y

它放出“ Parser.cpp”和“ Parser.hpp”。在我们公司,我们不具备约定cpp/hppcpp/h文件。如何告诉野牛生成parser.hparser.cpp文件?

它厌倦了其文档,但未找到任何有关此的信息。

bison

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