如何从可能包含或不包含 null 的缓冲区构造“std::string”?

2023-12-08

我有一个缓冲区(为简单起见,假设是一个固定大小的数组)char我想建造一个std::string从。所述缓冲区可以是空终止的或者其内容可以运行到并包括最后一个字符。如果缓冲区确实包含一个或多个空值,它们不应该出现在结果中string。复制应该在第一个 null 处停止or缓冲区的末尾,以先到者为准。

这似乎是一件很常见的事情,但在查看解决方案时,解决方案对我来说并不是显而易见的std::string API.

  • std::string有一个构造函数通过以下方式获取范围const char *和一个长度,但很高兴继续过去空值并将它们复制到字符串中。
  • Calling std::strlen()在构造之前在缓冲区上string不是一个选项strlen要求字符串首先以 null 结尾。
  • 我们可以使用上面的构造函数来创建一个string包含空值,然后将其大小调整到第一个空值之前,但这会浪费内存,因为string将会被超额分配。

执行此操作的最佳和/或惯用方法是什么?


与许多有关 C++ 标准库的问题一样,答案是从迭代器的角度来思考问题。

std::string stringFromBuffer(const auto & buffer)
{
    return std::string(std::begin(buffer),
                       std::find(std::begin(buffer), std::end(buffer), '\0'));
}

std::string有一个带有两个迭代器的构造函数,first and last. The string将通过复制来创建first直到但不包括last.

So first显然应该是我们缓冲区的开始,而last应该是缓冲区中的第一个空值,或者是缓冲区末尾的空值。方便的是,这正是调用std::find搜索缓冲区'\0'将返回。

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

如何从可能包含或不包含 null 的缓冲区构造“std::string”? 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • SL4 AutoCompleteBox 重复筛选结果问题

    我在 AutoCompleteBox 过滤方面遇到问题 它似乎记住了之前的过滤器 例如 我输入 A 它会返回 1 项 我删除 A 并输入 Z 这应该返回 1 项 问题是它返回 A 过滤器加上 Z 的结果 我删除 Z 并输入 S 这会带回 2
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • 为什么派生类不使用基类的operator=(赋值运算符)?

    以下是实际问题的简化版本 而不是打电话Base operator int 代码似乎生成了一个临时的Derived对象并复制它 既然函数签名似乎完美匹配 为什么不使用基本赋值运算符 这个简化的示例没有显示任何不良影响 但原始代码在析构函数中有
  • 如何将pdf页面设置设置为打印属性对话框?

    大家好 我想知道如何设置 pdf 页面设置到打印属性对话框 例如 如果我的 PDF 页面设置为横向 则布局会自动显示横向而不是纵向 如果我的 PDF 页面设置为纵向 则布局会自动显示纵向 我在这个主题上做了很多研发 但没有找到任何满意的链接
  • 在运行时设置 DataGridView 上的 DataFormatString?

    是否可以在运行时设置 ASP NET DataGridView 中的列或单元格的 DataFormatString 属性 这应该有效 BoundField priceField grid Columns 0 as BoundField pr
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • 当在 Repository/UnitOrWork 之上使用 Service 类时,我应该在哪里放置逻辑不适合 Repository 的常用数据访问代码?

    In my 先前的问题 https stackoverflow com questions 24906548 using the generic repository unit of work pattern in large projec
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E

随机推荐

  • 在现有 UIKit 应用程序中包含 SwiftUI 视图

    是否可以使用 SwiftUI 与现有 UIKit 应用程序并排构建视图 我有一个用 Objective C 编写的现有应用程序 我已经开始迁移到 Swift 5 我想知道是否可以将 SwiftUI 与现有的 UIKit xib 视图一起使用
  • 用 grid 和 gtable 拆解 ggplot

    我正在努力构建基于的双轴图ggplot对象 根据巴蒂斯特的建议 我已将问题分解为更小的部分 目前的问题是 如何删除所有数据grobs 同时保留轴 轴标签 轴刻度线和网格线 我所说的 数据 是指与以下内容相关的数据geom line and
  • Pro AngularJS - 你能帮忙解释一下这段代码吗?

    我正在读 Apress 写的一本名为 Pro AngularJS 的书 我只是想确保我理解所有代码 但我对下面的代码有点困惑 下面是书中的一个自定义过滤器 它接受 2 个参数 数据数组和属性名称 在书中 属性名称是数据中的类别键 设置它是为
  • gcc 中类型的非常量引用初始化无效,但 Visual Studio 中无效

    我有一些代码 其中 IInterface 是一个抽象类 我正在写这个 IInterface q InterfaceImpl 并在 Visual Studio 2008 中编译它并且运行良好 然后我将它移植到 gcc 项目中 突然出现这个错误
  • SQL Server - 在 WHERE 子句中使用 CASE

    我想用CASE in WHERE子句 但它返回错误 我可以在 where 子句中使用 CASE 吗 或者如何解决它 谢谢 SELECT FROM hris leave dbo tbl act inner join hris leave db
  • 如何用 C 语言按行块处理文本文件?

    我正在用 C 编写一个程序 该程序处理一个文本文件并跟踪每个唯一的单词 通过使用一个具有该单词的 char 数组和其出现次数的计数的结构 并将该结构存储到数据结构中 然而 作业中包含这样的内容 整个 txt 文件可能非常大 无法保存在主内存
  • 什么是“<调用>d__40”?

    使用 Powershell System Management Automation Cmdlet Invoke 返回类型的对象
  • 单击 HTML5 数据列表选项时执行操作

    我正在使用一个
  • 改变 CGRect (或任何结构)?

    我在我的代码中做了很多这样的事情 self sliderOne frame CGRectMake newX 0 self sliderOne frame size width self sliderOne frame size height
  • 卷积神经网络输出所有标签的相同概率

    我目前正在 MNIST 上训练 CNN 随着训练的进行 输出概率 softmax 给出 0 1 0 1 0 1 初始值不统一 所以我不知道我是否在这里做了一些愚蠢的事情 我只训练了15步 只是为了看看训练进展如何 尽管这个数字很低 但我认为
  • Swift:无法以编程方式编辑自定义表格单元格的属性

    我正在尝试更改自定义表格单元格内视图的颜色 并且我有一个可以使用的出口 我可以更改此视图的其他属性 例如 isHidden but backgroundColor似乎不起作用 知道我做错了什么吗 UIColor 名为 绿色 适用于应用程序的
  • 如何在 swift 中将双精度型转换为字节数组?

    我知道如何在java中做到这一点 参见here 但我找不到 java 的 ByteBuffer 的快速等效项 因此找不到它的 putDouble double value 方法 基本上 我正在寻找这样的函数 typealias Byte U
  • 有没有办法在每个页面上打印网页页眉/页脚?

    根据我的研究 似乎我想做的事情是不可能的 但以防万一发生了变化 我想检查一下是否有人想出了一种方法来做到这一点 我有一个网络应用程序 可以根据浏览器窗口中的用户选择生成打印报告 我有一个自定义页眉和页脚 当从浏览器打印报告时 应在每个打印页
  • 在 R 中使用 ggplot2 创建“雷达图”(又名星图;蜘蛛图)

    我想创建一个如下图所示的图 我知道我可以使用radarchart函数来自fmsb包裹 我怀疑是否ggplot2可以用极坐标这样做吗 谢谢 首先 我们加载一些包 library reshape2 library ggplot2 library
  • JS:如何在没有 XMLHttpRequest 的情况下对本地文件进行 Base64 编码?

    我正在尝试对本地文件进行 Base64 编码 它就在我的旁边 js文件 因此不会进行上传 解决方案如this using XMLHttpRequest 出现跨站点脚本错误 我正在尝试这样的事情 这不起作用 但它可能有助于解释我的问题 var
  • 获取 MySQL 数据库列表和服务器版本?

    我的 MySQL 连接字符串是 Server localhost User ID root Password 123 pooling yes charset utf8 DataBase 我的问题是 我应该编写什么查询来获取存在的数据库名称
  • Qt:重叠半透明QgraphicsItem

    我使用 QGraphicsView 一段时间了 我面临着一个先决条件 我不确定使用这个框架是否可以满足它 尽可能简单地说 我有 2 个重叠的 RectItem 和一个半透明的 QBrush 两者相同 是否可以防止重叠区域变得更加不透明 我只
  • Google Drive 使用 javascript 断点续传

    我正在尝试使用以下方式将文件上传到 Google 云端硬盘适用于 JavaScript 的 Google API 客户端库 and 可断点上传类型 我成功进行了身份验证并获取了上传 URI 但在发送实际数据时遇到了问题 如果文件仅包含 AS
  • 仅针对更改的文件增量构建 VSTS (Wordpress)

    我有一个用于 Wordpress php 文件的构建和发布管道 但我只想为源代码管理中更改的文件创建构建 我没有使用 Visual Studio 构建任务 因为我猜这不适用于 php 文件 以下是管道的配置方式 目前根据build我仅使用来
  • 如何从可能包含或不包含 null 的缓冲区构造“std::string”?

    我有一个缓冲区 为简单起见 假设是一个固定大小的数组 char我想建造一个std string从 所述缓冲区可以是空终止的或者其内容可以运行到并包括最后一个字符 如果缓冲区确实包含一个或多个空值 它们不应该出现在结果中string 复制应该