将 std::string ** 转换为 char *** 并且它恰好可以工作。如何?

2023-12-26

考虑以下代码:

std::vector<std::string> foo{{"blee"}, {"bleck"}, {"blah0000000000000000000000000000000000000000000000000000000000000000000000000000000000"}};
std::string *temp = foo.data();
char*** bar = reinterpret_cast<char***>(&temp);

for (size_t i = 0; i < foo.size(); ++i){
    std::cout << (*bar)[i] << std::endl;
}

显然这是粗略的代码,但它恰好可以工作。

http://ideone.com/2XAJYR http://ideone.com/2XAJYR

我想知道为什么它有效? C++ 有一些我不知道的奇怪规则吗?或者只是糟糕的代码和未定义的行为?

我将其中一个字符串设置得很大,以防进行一些小字符串优化。

改编自:将 std::string 向量转换为 char*** https://stackoverflow.com/questions/27687751/cast-a-vector-of-stdstring-to-char/29031944#29031944


这是非常不确定的行为。

如果字符串实现恰好包含指向字符串数据的指针作为其唯一的数据成员,那么它看起来会“工作”,因此数组string与数组具有相同的内存布局char*。至少一种流行的实现 (GNU) 就是这种情况,但肯定不是您可以依赖的东西。

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

将 std::string ** 转换为 char *** 并且它恰好可以工作。如何? 的相关文章

  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 如何使用recv()检测客户端是否仍然连接(并且没有挂起)?

    我写了一个多客户端服务器程序C on SuSE Linux 企业服务器 12 3 x86 64 我为每个客户端使用一个线程来接收数据 我的问题是 我使用一个终端来运行服务器 并使用其他几个终端来运行服务器telnet到我的服务器 作为客户端
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • Neo4j 中所有节点/关系的可靠(自动)递增标识符

    我正在寻找一种方法 基于递增计数器 不是大而长的 uuid 为 Neo4j 中的所有节点 关系生成唯一标识符 众所周知 Neo4j 引擎维护的内部 ID 不如外部引用可靠 一个接近的解决方案是这个问题中提出的代码 https stackov
  • 在 React JSX 中选择性地渲染可选组件属性

    我有一个用例 其中有一个图像组件 该组件具有必需的 src 属性和可选的 link 属性 如下所示 var Image React createClass propTypes link React PropTypes string even
  • Firebase snapshot.key 未返回实际密钥?

    我有一个根据用户 ID 搜索用户的查询 usersRef queryOrderedByChild email queryEqualToValue email observeEventType Value withBlock snapshot
  • 是否可以将 will_paginate 与 GROUP BY 一起使用?

    我有一个巨大的数据库 我想通过使用 will paginate 来减少查询响应时间 我试图按列对条目进行分组 然后使用 will paginate 将结果放入不同的页面 我尝试这样做 list Persons find by sql sel
  • 如何在Python中将异构列表扁平化为单个列表? [复制]

    这个问题在这里已经有答案了 我有一个对象列表 其中对象可以是列表或标量 我想要一个只有标量的扁平列表 例如 L 35 53 525 6743 64 63 743 754 757 outputList 35 53 525 6743 64 63
  • Perl 正则表达式限制的解决方法?

    我编写了一个程序来从邮件文件夹中提取附件 GITHUB https github com barrycarter bcapps blob master bc extract attachments pl 但由于 Perl 对正则表达式匹配的
  • Angular 2 AOT 构建错误 - JavaScript 堆内存不足

    我的 Angular 2 应用程序是由angular2 webpack 启动器 https www npmjs com package angular2 webpack starter 当我运行命令时npm run build aot构建A
  • pandas 上的数据框划分系列

    我需要划分矩阵的每一列df1进入矩阵的单列df2 得到一个有维数的矩阵df1 3 2 我需要一个结果 dataframe 1 6 2 7 3 8 3 6 4 7 5 8 df1 pd DataFrame data 1 2 3 3 4 5 i
  • 在批处理文件中逐行读取txt

    这是我的问题 我有一个 txt 文件 其中包含 100 个不同的视频名称 示例 abc mpg def mpg ghi mpg xyz mpg 我想使用一些命令逐一处理这些视频 并将结果放入同名的文件夹中 不带扩展名 command1 ab
  • 收集硬币并添加到 Sprite Kit 中的分数标签

    我正在尝试使用本教程作为参考 在我的游戏中实现一个简单的评分系统 http www raywenderlich com 87232 make game like mega jump sprite kit swift part 2 http
  • TagLib Sharp 不编辑艺术家

    我正在尝试将新的艺术家和标题 id3 标签保存到曲目中 从曲目加载标签工作正常 编辑曲目标题也工作正常 但是当我尝试编辑时演员 artist 它没有改变任何东西 这是代码 public void renameID3 string artis
  • 由于弃用而替换 self->isa

    我刚刚安装了 Xcode 4 6 现在我管理的古老代码中出现了新错误 编译器抱怨 直接访问 Objective C 的 isa 已被弃用 取而代之的是 object setClass 和 object getClass 并且该项目将无法构建
  • 如果 Vue 3 引用是对象的属性,则它们的行为会有所不同

    使用 Vue 3 的 Composition API 时 我注意到模板内部的引用在作为对象的属性进行访问时的行为有所不同 我认为这是最好的总结SFC Playground 中的这个示例 https sfc vuejs org eyJBcHA
  • F# 结构元组与 BCL 元组类型

    在 F 中你可以定义一个first函数如下 let first x y x 你可以这样称呼它 first 1 2 您还可以根据 BCL 定义相同的函数Tuple type let first t Tuple lt gt t Item1 但是
  • 如何使用 Github Actions 和语义发布 Github 插件发布整个目录?

    我想使用语义发布在 Github 版本上发布整个目录 构建目录 但不幸的是它将每个构建文件作为单个资产发布 对于复制 我正在使用 Vue CLI 生成项目vue create foo 安装语义释放作为开发依赖项npm install sav
  • 使用 VSTS 发布定义的蓝/绿部署

    我还没有看到任何有关如何在 VSTS 发布定义上进行蓝 绿部署的信息 我有一个 VSTS 发布定义 当我们的源代码中完成新的签入时 它会自动将新的更改部署到我们的 Prod 环境中 现在 该项目正在使用 Azure 流量管理器 并且添加了位
  • 枚举反向查找[重复]

    这个问题在这里已经有答案了 假设我有一个枚举 enum Color Red 1 Green Blue 如果我有一个号码 我可以通过这样做来获取枚举键 var colorName string Color 2 colorName Green
  • Python中使用os.walk()递归遍历目录

    我想从根目录导航到其中的所有其他目录并打印相同的内容 这是我的代码 usr bin python import os import fnmatch for root dir files in os walk print root print
  • ActiveModel::匿名类的验证

    我正在开发一个类似 DataMapper 的小型 ODM 项目 并且我正在尝试利用ActiveModel Validations成分 然而 我在编写测试时遇到了问题 我使用匿名类来构建我的测试模式 但是当涉及到运行验证器时 ActiveMo
  • 将 std::string ** 转换为 char *** 并且它恰好可以工作。如何?

    考虑以下代码 std vector