使 WCHAR 为空终止

2023-11-27

我有这个

WCHAR 文件名[1];

作为函数的返回值(它是 sys 32 函数,因此我无法更改返回的类型)。我需要使 fileName 以 null 结尾,因此我尝试将 '\0' 附加到它,但似乎没有任何效果。

一旦我得到一个以 null 结尾的 WCHAR,我将需要将其传递给另一个 sys 32 函数,因此我需要它保持为 WCHAR。

有人可以给我任何建议吗?

=================================================

非常感谢您的帮助。看来我的问题不仅仅与缺少空终止字符串有关。

//这有效:

WCHAR szPath1[50] = L"\\Invalid2.txt.txt";
    dwResult = FbwfCommitFile(szDrive, pPath1); //Successful

//这不会:

std::wstring l_fn(L"\\");  
    //Because Cache_detail->fileName is \Invalid2.txt.txt and I need two
l_fn.append(Cache_detail->fileName);
l_fn += L""; //To ensure null terminated
fprintf(output, "l_fn.c_str: %ls\n", l_fn.c_str()); //Prints "\\Invalid2.txt.txt"

    iCommitErr = FbwfCommitFile(L"C:", (WCHAR*)l_fn.c_str()); //Unsuccessful

//然后当我对这两者进行比较时,它们是不平等的。

int iCompareResult = l_fn.compare(pPath1);  // returns -1

所以我需要弄清楚这两者最终是如何不同的。

多谢!


由于您在评论中提到了 fbwffindfirst/fbwffinnext ,所以您正在谈论返回的文件名FbwfCache详细信息。因此,从 fileNameLength 字段中您可以知道文件名的长度(以字节为单位)。 WCHAR 中 fileName 的长度为 fileNameLength/sizeof(WCHAR)。所以简单的答案是你可以设置

fileName[fileNameLength/sizeof(WCHAR)+1] = L'\0'

现在这是重要的您需要确保为 fbwffindfirst/fbwffindnext 发送的 cacheDetail 参数的缓冲区的 sizeof(WCHAR) 字节比您需要的大,上面的代码片段可能会在数组范围之外运行。因此,对于 fbwffindfirst/fbwffinnext 的大小参数,传入缓冲区大小 - sizeof(WCHAR)。

例如这个:

// *** Caution: This example has no error checking, nor has it been compiled ***
ULONG error;
ULONG size;
FbwfCacheDetail *cacheDetail;

// Make an intial call to find how big of a buffer we need
size = 0;
error = FbwfFindFirst(volume, NULL, &size);
if (error == ERROR_MORE_DATA) {
    // Allocate more than we need
    cacheDetail = (FbwfCacheDetail*)malloc(size + sizeof(WCHAR));
    // Don't tell this call about the bytes we allocated for the null
    error = FbwfFindFirstFile(volume, cacheDetail, &size);
    cacheDetail->fileName[cacheDetail->fileNameLength/sizeof(WCHAR)+1] = L"\0";

    // ... Use fileName as a null terminated string ...

    // Have to free what we allocate
    free(cacheDetail);
}

当然,您必须进行一些更改才能适应您的代码(另外您还必须调用 fbwfffinndnext )

如果您对为什么 FbwfCacheDetail 结构以 WCHAR[1] 字段结尾感兴趣,请参阅此博客文章。这是 Windows API 中非常常见的模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 WCHAR 为空终止 的相关文章

  • Alpha 混合可消除图像中的接缝

    我缝合了两张图像 但在最终图像中存在可见的接缝 我正在尝试使用阿尔法混合去除那条接缝 我知道 Alpha 混合是使用cvAddweight 函数 但在此函数参数是两个图像 alpha beta gamma和目的地 我正在服用gamma 0
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • 为什么我不能执行 std::map.begin() + 1?

    我有一个std map 我想从第二个条目开始迭代 我可以解决这个问题 但我对为什么 明显 语法无法编译感到困惑 该错误消息没有帮助 因为它指的是std string 我在这里没有使用它 这是一些代码 Suppose I have some
  • 如何向 Visual Studio 项目添加其他库?

    Allegro 是一个用于图形操作的开源 C 插件库 如何将此库添加到我的编译器中 这些说明对我不起作用 因为我使用的是 Windows 7 我不知道操作系统是否重要 我有 Visual Studio Express 版本 该库是一个 dl
  • 何时在 C++ 中使用 __declspec(dllexport)

    我正在制作这个 DLL 项目 并且不包含任何特定于编译器的宏 在我的 DLL 文件中导入方法后 导入器 exe 文件编译干净并且没有生成错误 他们从事不同的项目 但解决方案相同 我是否因为没有使用任何这些调用约定而把事情搞砸了 我的 DLL
  • 使用 Visual Studio Express 2010 表单应用程序进行 C++ 多线程处理

    我正在开发一个 Windows 窗体应用程序 它连接到一个硬件 获取大量数据 1 GSample 秒 对其进行处理 然后单击按钮将其输出到屏幕上 我现在尝试在一个可以随时启动 停止的循环中自动化该过程 以便我可以在调整采集硬件的输入的同时对
  • MFC CImage alpha 混合出错

    我必须在图片控件上呈现由两个 PNG 文件组成的图像 其中顶部图像在某些位置具有透明像素 结果应该是plotter png 与 bar png 顶部重叠显示为 注意条上奇怪的白色轮廓 但应该是 我为它编写的代码很简单 CImage imag
  • 从 C++ 源文件创建 Windows DLL

    我有多个 C 源文件 我想使用它们创建动态链接库 我在 linux 中使用 gcc shared 和 ln 看到这种情况发生 但是对于 Windows 我想我必须修改源文件才能生成 DLL 有没有办法用提供的源文件生成DLL 类似于linu
  • Visual Studio 2017 中的“onecore”文件夹

    在Visual Studio 2017 RTM VC Tools MSVC 14 10 25017 lib文件夹中 有一个名为 onecore 的文件夹 里面有x64 x86和arm的文件夹 每个文件夹都包含一些VC Tools中已经存在的
  • 即使安装了 Microsoft Visual C++ 14.0 也出现 Pip 错误

    我阅读了之前相关或询问的所有问题和答案 但仍然没有找到适合我的问题的答案 我正在使用 python 3 6 5 并且 pip 和 setuptools 是最新的 我从这里安装了 Microsoft Visual C Redistributa
  • 使用 Windows 电源管理 API 调暗显示器

    我正在尝试做一些看起来很简单的事情 我只想让我的程序能够在某些条件下调整显示器亮度 于是 我向窗户望去电源管理API http msdn microsoft com en us library aa373163 28v vs 85 29 a
  • 有效地调用非托管方法,将非托管对象作为托管代码的参数

    我有以下场景 托管代码将初始化类的许多对象 该类是非托管结构的包装器 为此我可以采用两种方法 一种是拥有一个托管类包装器 它只有一个指向非托管对象的指针 另一种是拥有一个成熟的托管类 并在需要调用非托管方法时创建非托管对象 我已经提供了以下
  • 完整的端到端教程 C++ 与 MYSQL Server 5.5

    我花了几个小时寻找关于如何使用 MYSQL Server 5 5 进行查询的完整端到端教程 这是使用 Visual Studio 2010 Express 的 Visual C 控制台应用程序 有人看过这个设置的实际工作教程吗 当所有内容都
  • Visual C++ MFC 中窗口启动时的事件顺序

    假设我有一个从 CWnd 派生的类 它具有事件处理函数OnPaint OnCreate and OnSize 如您所知 所有这些都是在窗口启动时发生的 但我想看看它们之间的顺序是什么 例如 当我在其中一个中设置断点时 在结束函数后 控制不会
  • 在 win32 API 应用程序中实现全球化/多语言功能

    我用 Visual C 开发了一个窗口应用程序 Win32 API 我必须在此应用程序中添加多语言功能 任何人都可以指导我如何完成这项任务 Windows 上多语言应用程序的基础是 资源 的使用 资源是附加在可执行文件末尾的块 它仅包含数据
  • 子类化 QVector

    这是我的问题 我想对 QVector 进行子类化 以便添加一些特定于我的上下文的函数 天真的方法是 class ClassVector public QVector
  • 不使用 DAO 压缩 Microsoft Access 数据库

    我用CDatabase类开一个ACCDB访问数据库 司机是 T Microsoft Access Driver mdb accdb 我可以打开并使用数据库 已经这样做很多年了 if DatabaseExist m strMDBPath AJ
  • 如何更新 C++ dll 而无需将 exe 与 lib 文件重新链接?

    首先 我指的是 Windows 环境和 VC 编译器 我想要做的是重建 Vc dll 并保持与已链接到 lib 的 exe 的兼容性 而无需重建 exe 或使用 LoadLibrary 动态加载 dll 换句话说 有没有办法向 dll 添加
  • 从挂钩的 exe 获取详细的故障转储

    我正在尝试查找我的程序与游戏挂钩的问题 这是 VC 基本上我启动该程序 然后使用 SDL 连接到它 当我从 VS2010 运行代码时 一切正常 但是当我尝试从命令提示符运行时 我的程序可以启动游戏 但之后游戏立即崩溃 我正在查看 Windo
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查

随机推荐

  • SQL Server exec 关键字

    T SQL中exec关键字的作用是什么 I tried EXEC sp rename mytable foo bar column and sp rename mytable foo bar column 两个命令产生的结果看似相同 If
  • Android - 通过 DDMS 分析特定线程(UI 线程)

    我试图找到在某些条件下我的应用程序中 UI 线程冻结的原因 我已通过 DDMS 分析运行该应用程序 但在底部树表视图中 我看到所有线程上调用的所有方法 而我只想关注主线程 有没有办法过滤 DDMS 中方法的底部树表列表 以仅包含所选线程 在
  • 在詹金斯工作中通过 FTP 下载文件?

    似乎只能使用以下命令通过 FTP 上传文件 https wiki jenkins ci org display JENKINS Publish Over FTP Plugin 但是我需要通过 FTP 下载一个文件 我可以为此编写一个 gro
  • 数组之前的 Ruby * 运算符[重复]

    这个问题在这里已经有答案了 可能的重复 理解范围和数组中的 ruby splat 谁能告诉我下面代码中 的作用是什么 line name yabbi language ruby Hash line split Thanks 是 splat
  • jquery validate需要点击submit两次才能提交表单

    我在模态中有一个表单 用户必须填写表单 否则验证将显示必填字段错误消息 然后单击提交输入类型 它什么也不做 然后再次单击它 然后它将通过ajax发布 并返回 谢谢 消息 我已经浏览了 Stackoverflow 并应用了我遇到的问题的答案
  • CPAN 首次启动(代理配置)

    我需要通过代理运行 cpan 但是当我尝试配置时出现错误 并且第一次无法进入 cpan root srv linux01 cpan CPAN pm requires configuration but most of it can be d
  • 使用 ASP.NET 日历控件时如何隐藏周末?

    有时 在显示日历时 需要防止显示周末日期和日期标题中的周末名称 有没有办法使用ASP NET 日历控件 由于提供了控件 因此在不重写控件的情况下无法执行此操作 执行此操作的一种方法是覆盖当天渲染 and Render在将输出发送回客户端之前
  • 在应用程序购买中,用户在应用程序处于后台时取消交易:交易状态保持在购买状态

    当应用程序处于后台且用户尚未登录商店时 我在应用程序购买 沙盒环境 中取消用户时出现一些奇怪的行为 流程如下 用户未登录 未在 设置 gt 商店 中设置应用程序 ID 用户点击购买按钮 这调用 SKPaymentQueue defaultQ
  • 动态地将可调用对象添加到类作为实例“方法”

    我实现了一个元类 它拆除用它创建的类的类属性 并根据这些参数的数据构建方法 然后将这些动态创建的方法直接附加到类对象 所讨论的类允许轻松定义 Web 表单对象在网络测试框架中使用 它一直工作得很好 但现在我需要添加一种更复杂类型的方法 为了
  • 在ios中使用查询字符串创建NSURLRequest

    我在 ios 中创建了一个用户查询表单 我使用 php 作为服务器端 我在 IOS 中构造了如下所示的查询字符串 http www mydomain in androidmail enquiry php name Vinoth Kumar
  • 如何将包含单引号的字符串保存到 PostgreSQL 中的文本列

    我在 Smartwcm Web 应用程序 SDK 中使用 hibernate 和 PostgreSQL 作为数据库 我在其中一个表中有一个字段 其数据类型是文本 当我尝试使用 hibernate 使用相应的 POJO 将值插入表中时 如果我
  • 无法使用 VS 2013 RTM 编译 OpenCV 2.4.5

    有人用 VS 2013 RTM 编译过 openCV 吗 我尝试在 IlmImf 模块中获取一堆 min 不属于命名空间 std max 不属于命名空间 std 并且 opencv features2d 无法编译并出现以下错误 opencv
  • 如何设置
    元素的箭头样式?

    我正在使用这段代码 另请参阅JSFiddle 以更改悬停时箭头的背景颜色 但是 这不起作用 因为箭头仅在单击时更改其颜色 summary webkit details marker color B6B6B6 font size 20px m
  • ClassInitialize 中生成的数据驱动测试:不再在 Visual Studio 2012 中工作

    我已从 Visual Studio 2010 升级到 Visual Studio 2012 在我的单元测试项目中 我有一个 ClassInitialize 方法 它生成一个 CSV 文件 然后使用连接到 CSV 的 DataSource 将
  • 数据库如何自动生成唯一标识符?

    我有一个带有 id guid 列的 sql 表 如何强制数据库为每条新记录自动生成新的 guid Add DEFAULT newid
  • Global.asax 中的 ASP.NET 路由

    我试图通过以下方式在我的 Web 表单应用程序中添加一条路线 http msdn microsoft com en us library cc668201 aspx adding routes to a web forms applicat
  • faces-redirect 和后退按钮导致其他链接无法正常工作

    我有一个关于面孔导航的问题 所以我有一个页面 它采用请求参数来加载特定用户 此页面显示 commandLink 列表 单击该列表后 将使用隐式导航重定向到另一个页面 通过调用 preRenderView 中的方法来加载用户 我们重定向到的页
  • 如何将协作者添加到 Firebase 应用程序?

    在最新版本的Firebase 在 Google I O 2016 期间宣布 如何将我想要的其他人添加到我的项目或应用程序中collaborate和 我通过以下途径认识了 IAM 角色Settings gt Permissions 这是正确的
  • Bootstrap Tour 不记得我离开的地方

    当我到达第二页时 我在多页游览中启动 Bootstrap Tour 时遇到问题 我以点击事件开始游览localStorage被设定为false 游览从单击事件开始正常 但是当我转到游览的第二步并加载新页面时 游览不会从中断处继续 如何在这个
  • 使 WCHAR 为空终止

    我有这个 WCHAR 文件名 1 作为函数的返回值 它是 sys 32 函数 因此我无法更改返回的类型 我需要使 fileName 以 null 结尾 因此我尝试将 0 附加到它 但似乎没有任何效果 一旦我得到一个以 null 结尾的 WC