std::string::c_str() 结果的生命周期是多少?

2024-04-20

在我的一个程序中,我必须与一些可以使用的遗留代码进行交互const char*.

可以说我有一个如下所示的结构:

struct Foo
{
  const char* server;
  const char* name;
};

我的更高级别的应用程序只处理std::string,所以我想到使用std::string::c_str()去取回const char*指针。

但人的寿命是多少c_str()?

我可以做这样的事情而不面临未定义的行为吗?

{
  std::string server = "my_server";
  std::string name = "my_name";

  Foo foo;
  foo.server = server.c_str();
  foo.name = name.c_str();

  // We use foo
  use_foo(foo);

  // Foo is about to be destroyed, before name and server
}

或者我应该立即复制结果c_str()到另一个地方?


The c_str()如果结果无效std::string被销毁或者调用字符串的非常量成员函数。因此,如果您需要保留它,通常您会想要制作一份副本。

就您的示例而言,结果似乎是c_str()可以安全使用,因为字符串在该范围内不会被修改。 (然而,我们不知道什么use_foo() or ~Foo()可能会用这些价值观来做事;如果他们将字符串复制到其他地方,那么他们应该做一个真正的copy,而不仅仅是复制char指点。)

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

std::string::c_str() 结果的生命周期是多少? 的相关文章

  • 为什么迭代器类型推导失败? [复制]

    这个问题在这里已经有答案了 为什么这在 C 中不起作用 为什么我不能限制foo的参数为std vector
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • 如何将 mat 转换为 array2d

    我为dlib http dlib net face landmark detection ex cpp html那里的面部地标代码使用 array2d 来获取图像 但我喜欢使用 Mat 读取图像并转换为 array2d 因为 dlib 仅支
  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali
  • C 中的双重否定:是否保证返回 0/1?

    Is x 标准保证返回0 1 请注意 我是not询问 C 其中定义了 bool 类型 是的 在 C99 中 请参阅 6 5 3 3 4 逻辑非运算符的结果 是0如果其操作数的值比较 不等于0 1如果其操作数的值比较等于 0 结果具有类型in
  • 如何检查给定调用站点的重载决策集

    如何检查重载解析集 我在多个调用站点中使用了 4 个相互竞争的函数 在一个调用站点中 我期望调用一个函数 但编译器会选择另一个函数 我不知道为什么 这不是微不足道的 为了了解发生了什么 我正在使用enable if disable if打开
  • WPF ComboBox 中具有本地化名称的枚举

    我有一个列出枚举的组合框 enum StatusEnum Open 1 Closed 2 InProgress 3
  • 是否可以在对Where 的调用中调用命名方法?

    我试图从 RedGate 的这本免费电子书中了解 Linq 的一些性能影响ftp support red gate com ebooks under the hood of net memory management part1 pdf f
  • 指向 VLA 的指针

    你可能知道 VLA 的优点和缺点 https stackoverflow com a 3082302 1606345在 C11 中它们是可选的 我认为使 VLA 成为可选的主要原因是 堆栈可能会爆炸 int arr n where n 10
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • C# 从今天起 30 天

    我需要我的应用程序从今天起 30 天后过期 我会将当前日期存储在应用程序配置中 如何检查应用程序是否已过期 我不介意用户是否将时钟调回来并且应用程序可以正常工作 用户太愚蠢而不会这样做 if appmode Trial string dat
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • 如何在RcppParallel中调用用户定义的函数?

    受到文章的启发http gallery rcpp org articles parallel distance matrix http gallery rcpp org articles parallel distance matrix 我
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本
  • 如何编写完全可移植的 4 字节字符常量的编译时初始化

    遗留 代码大致如下所示 define MAKEID a b c d UInt32 a lt lt 24 UInt32 b lt lt 16 UInt32 c lt lt 8 UInt32 d define ID FORM MAKEID F
  • 查找文本文件中每行的行大小

    如何计算每行中的字符或数字数量 是否有类似 EOF 的东西更像是行尾 您可以遍历行中的每个字符并不断增加计数器直到行尾 n 遇到 确保以文本模式打开文件 r 而不是二进制模式 rb 否则流不会自动将不同平台的行结束序列转换为 n 人物 这是
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int
  • Java 9 中紧凑字符串和压缩字符串的区别

    有什么优点紧凑的字符串 http openjdk java net jeps 254JDK9 中的压缩字符串 压缩字符串 Java 6 和紧凑字符串 Java 9 都有相同的动机 字符串通常实际上是 Latin 1 因此浪费了一半的空间 和
  • 如何将 Pandas Dataframe 中的字符串转换为字符列表或数组?

    我有一个名为的数据框data 其中一列包含字符串 我想从字符串中提取字符 因为我的目标是对它们进行一次性编码并使之可用于分类 包含字符串的列存储在预测因子如下 predictors pd DataFrame data columns Seq

随机推荐

  • 如何创建一个从 NSWindow 模态弹出的 NSPanel(Cocoa 编程)

    就像在 NSWindow 中单击按钮后显示的 NSPanel 一样 我查了很多 但没有简单的例子 谢谢你的帮助 可以这样做 IBAction showButtonAction id sender NSApplication sharedAp
  • Chrome 浏览器开发者工具:脚本多次出现

    当使用 Chrome 的开发者工具调试 Javascript 时 当我更改 重新加载 测试代码时 脚本 列表往往会添加每个脚本的多次出现 Safari 使用相同的基本工具集 但不这样做 某个脚本在此列表中出现 10 次并不陌生 发生这种情况
  • 使用新数据重新加载 ngx-graph

    我正在尝试泳道 ngx graph 在我的应用程序中用户可以删除或添加节点 根据删除或添加操作 我将相应地更新我的数据 现在真正的问题是如何在不刷新整个页面的情况下刷新图表 您可以使用以下方法更新它update 图表的选项 HTML
  • ASP.NET MVC3 部分视图命名约定

    我是 MVC 开发的新手 所以请耐心等待 真的有必要将我的部分视图命名为 Action cshtml 与 下划线 以遵守命名约定 这是我的问题我有一个控制器 StudentController 和一个操作 List 它有一个名为 List
  • 将多个正则表达式合并为一个

    我正在尝试编写一个代码将字符串连接成拉丁诗句 我已经处理了一些限制 但是我没有得到所需的输出 我的代码如下
  • Swift:标准数组的二分搜索?

    我有一个排序数组 想对其进行二分搜索 所以我问 Swift 库中是否已经有一些东西可以使用 比如排序等 或者是否有可用的类型无关版本 当然我可以自己写 但我喜欢避免再次重新发明轮子 这是我最喜欢的二分搜索实现 它不仅对于查找元素很有用 而且
  • 类型错误:$(...).selectize 不是函数

    我将 selectize rails gem 安装到了我的 Rails 应用程序中 并且正在尝试使其正常工作 我的网络控制台中不断出现此错误 TypeError selectize is not a function 并且浏览器中没有任何反
  • 使用 xcodebuild 构建等待 /"runContextManager.runContexts" 超时

    我正在设置我的 iphone 项目以与 hudson 一起运行 我的构建脚本在本地运行良好 但是当在我的雪豹服务器 mac 上执行以下命令时 xcodebuild sdk iphoneos4 3 workspace Moments xcwo
  • 单击闪亮的操作按钮后将光标聚焦在文本区域

    无论如何 我都不是 html 或 JavaScript 方面的专家 因此 我希望您能就这个问题得到帮助 我认为我应该提供应用程序的较小版本 以便能够解释问题 这是一个简单应用程序的 app R 它允许用户在文本区域中写入一个单词 单词的第一
  • Laravel 5 Dotenv 用于特定子域

    我的 laravel 5 应用程序中有几个子域 每个子域都有特定的配置 如 mail nocaptcha 等 如何设置 env 文件以与我的特定子域一起使用 是的 您可以使用单独的 env每个子域的文件 因此如果您在配置中使用环境变量 它将
  • 在 R 中的 dplyr 中分组一些其他变量后,如何保留其他变量?

    之前今天我发布了这个问题here https stackoverflow com questions 72461943 how can i add missing month value and remove duplicate in dp
  • nginx+uwsgi+django,uwsgi中似乎有一些奇怪的缓存,帮帮我

    这是 uwsgi 配置 uwsgi uid 500 listen 200 master true profiler true processes 8 logdate true socket 127 0 0 1 8000 module www
  • C#中小时和分钟的时间跨度计算

    最终结果应向用户显示开始时间和结束时间之间的时间跨度 例如 早上 06 30 开始工作 晚上 18 30 结束 显示的结果应为 12 小时 现在 我必须DateTime参数 从时间和到时间 每个DateTime参数具有 24 小时格式的小时
  • 使用 JPA 跟踪历史记录

    我想通过使用一个新表来存储日志 其中包含进行更改的用户 日期以及每次更新 插入中发生的任何更改 从而为我的模型实体之一实现历史记录跟踪 审核 我使用 EclipseLink 作为我的 JPA 提供程序 但我不想使用它历史政策 http wi
  • System.web.mvc 缺失

    我们有一个旧的 ASP NET MVC 3 Web 应用程序 在 VS2010 中构建 自上周的安全更新以来无法编译 问题在于对 System Web Mvc dll 的引用已损坏 当我在尚未运行安全更新的构建计算机上打开解决方案文件 并打
  • 重写 Spring Data Rest 请求映射

    我们目前有一个level 2 http martinfowler com articles richardsonMaturityModel htmlRESTful Web 服务 我们正在更新该服务以纳入超媒体支持 我们在后端使用 Sprin
  • 在ggplot中组合geom_rect和facet_grid时遇到问题

    我想在简单绘图的每个方面对背景的一部分进行着色 如果我省略构面并运行 geom rect geom point 预期结果将如下面的 MRE 所示 如果我省略矩形并运行 geom point facet grid 则预期的 4 个面板的每个点
  • oracle中如何将单行数据转换为单列数据

    我有一个像这样的表 column1 column2 column3 column4 A B C D 想要将其转换为 Column A B C D 在 oracle 中不使用此联合 select column1 as Column from
  • C# 中 PInvoke 代码的使用

    我有以下使用 DLLImport 的 C 代码 using System namespace LvFpga class RegTest DllImport kernel32 public extern static int LoadLibr
  • std::string::c_str() 结果的生命周期是多少?

    在我的一个程序中 我必须与一些可以使用的遗留代码进行交互const char 可以说我有一个如下所示的结构 struct Foo const char server const char name 我的更高级别的应用程序只处理std str