-读取字符串字符时出错

2023-11-23

我有以下代码块:

for( CarsPool::CarRecord &record : recs->GetRecords())
{
  LVITEM item;
  item.mask = LVIF_TEXT;
  item.cchTextMax = 6;

  item.iSubItem = 0;
  item.pszText = (LPSTR)(record.getCarName().c_str()); //breakpoint on this line.
  item.iItem = 0;
  ListView_InsertItem(CarsListView, &item);

  item.iSubItem = 1; 
  item.pszText = TEXT("Available");
  ListView_SetItem(CarsListView, &item);

  item.iSubItem = 2;
  item.pszText = (LPSTR)CarsPool::EncodeCarType(record.getCarType());
  ListView_SetItem(CarsListView, &item);
}

来自 Visual Studio 调试器的信息如下:

enter image description here

为什么程序无法从字符串中读取字符?

测试表明它是这样工作的:

MessageBox(hWnd, (LPSTR)(record.getCarName().c_str()), "Test", MB_OK);

getCarName可能会返回一个临时的。赋值后,临时对象被销毁,指针item.pszText指向无效内存。您必须确保字符串对象在调用期间有效ListView_InsertItem.

std::string text(record.getCarName());
item.iSubItem = 0;
item.pszText = const_cast<LPSTR>(text.c_str());
item.iItem = 0;
ListView_InsertItem(CarsListView, &item);

The const_cast这是 Windows API 使用相同结构来设置和检索信息这一事实的产物。调用时ListView_InsertItem结构是不可变的,但是无法在语言中反映这一点。

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

-读取字符串字符时出错 的相关文章

  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • mysql 左外连接

    我有两张桌子 employee包含字段employee id 名字 中间名 姓氏 timecard包含字段employee id 入职时间 超时 tc date transaction 我想选择具有与考勤卡相同的employee id 且日
  • 在 PostgreSQL 中生成两个日期之间的时间序列

    我有一个这样的查询 可以很好地生成两个给定日期之间的一系列日期 select date 2004 03 07 j i as AllDate from generate series 0 extract doy from date 2004
  • 如何使用 Google Test 捕获分段错误?

    如何测试函数不会产生分段错误 这是我现在所知道的 我可以做的 EXPECT DEATH foo nullParameter 在函数内部 会产生分段错误 这是我想要失败的行为 上面的代码片段将使测试通过 因为这是预期的 进程的死亡 现在 我怎
  • 打包 APK 时出现错误:: 重复文件

    安卓工作室 我在应用程序运行期间遇到此类错误 Error Execution failed for task app packageDebug Duplicate files copied in APK META INF notice tx
  • SSRS 格式显示为百分比

    我已经在这里举了很多例子 如果我问重复的问题 我很抱歉 据我所知 我不是 我制作了一份 SSRS 报告 显示了我们销售部门某些方面的总销售额 它们按行细分 按 成本 毛利润 毛利润百分比 订单数 总销售额 这些栏目是我们销售的方面 网络销售
  • Android 处理程序定期

    这是我想要实现的目标 活动开始时没有 ClickListener 并且有四个文本视图 全部为白色背景 我想将 textview 1 的颜色更改为蓝色 等待 2 秒 然后将其改回白色 并将 textview 2 更改为蓝色 等待 2 秒 然后
  • 为什么我要费心使用 Task.ConfigureAwait(continueOnCapturedContext: false);

    考虑以下 Windows 窗体代码 private async void UpdateUIControlClicked object sender EventArgs e this txtUIControl Text I will be u
  • 最快的 JavaScript 求和

    在 JavaScript 中对数组求和的最快方法是什么 快速搜索翻了几种不同的方法 但如果可能的话我想要一个本机解决方案 这将在 SpiderMonkey 下运行 我一直在使用的非常内化的思维 var count 0 for var i 0
  • flutter:检查对象是否已存在于列表中

    我有以下代码 class FavoriteItem String headline String content String link String publisheddate FavoriteItem this headline thi
  • 不区分大小写 std::string.find()

    我在用std string s find 方法来测试一个字符串是否是另一个字符串的子字符串 现在我需要相同内容的不区分大小写的版本 对于字符串比较 我总是可以转向stricmp 但似乎没有stristr 我找到了各种答案 大多数建议使用Bo
  • 我可以使用 cerr 吗

    在下面描述的情况下使用 cerr 的风格是否良好 try cout lt lt a b catch const IntException e cerr lt lt Exception caught lt lt typeid e name u
  • 具有零参数和逗号的可变参数宏

    考虑这个宏 define MAKE TEMPLATE template
  • 如何在console.log中显示带引号的字符串输出?

    问题是如果我控制台记录这个字符串 Lorem the console log将输出 Lorem我无法判断字符串末尾是否有空格 如何强制控制台以引号显示输出 Try let s Lorem console log JSON stringify
  • 创建名称为“org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0”的bean时出错

    我是休眠新手 不太确定我的应用程序出了什么问题 所以我有这两个模块 核心和网站 模块核心拥有所有实体 DAO 和所有数据库工作 所有 DAO 都继承 AbstractDAO Module Website 完成所有前端工作 如jsps mvc
  • Javascript删除对象键数组值

    我有这个对象 object key 1 2 3 4 5 key2 5 7 8 9 如何删除对象键以及如何删除对象键值 要从对象中删除属性 您可以使用 delete object key 要从数组中删除项目 您可以使用许多方法 其中之一是使用
  • JSON到XML转换的Java实现[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 是否有现有的 JAR 可用于从 JSON 转换为 XML 您可以创建一个JSON对象 然后使用以下命令将其转换为 XMLXML类在 org json
  • 如何在 Tomcat 启动或应用程序部署时运行特定的 java 代码? [复制]

    这个问题在这里已经有答案了 可能的重复 tomcat自动启动servlet tomcat服务器启动时如何加载java类 不是servlet 我有在 Tomcat 服务器上运行的 Web 应用程序 我想在 Tomcat 启动或部署此应用程序时
  • 在 Express/Node.js 中通过重定向将错误消息传递给模板

    在我的 Node js 应用程序中 我有一个函数 由 Express 路由 它向用户呈现一个表单 app get register function req res res render form 我有另一个函数 路由到相同的 URL 但它
  • DynamoDB 对 JSON 对象的子字段进行查询

    是否可以在 dynamoDB 表中搜索 json 对象的子字段 我的桌子 Item item name Location ItemInformation ItemName itemName ProductLine Brand Razer M
  • -读取字符串字符时出错

    我有以下代码块 for CarsPool CarRecord record recs gt GetRecords LVITEM item item mask LVIF TEXT item cchTextMax 6 item iSubItem