返回对 C++ 中静态局部变量的引用

2024-04-03

这个问题只是为了我更好地理解C++中的静态变量。

我认为如果将 C++ 中的局部变量声明为静态,我可以返回对它的引用,因为该变量应该在函数返回后继续存在。为什么这不起作用?

#include <stdio.h>
char* illegal()
{
  char * word = "hello" ;
  return word ;
}

char* alsoNotLegal()
{
  static char * word = "why am I not legal?" ;
  return word ;
}


int main()
{
  // I know this is illegal
  //char * ill = illegal();
  //ill[ 0 ] = '5' ;
  //puts( ill ) ;

  // but why is this? I thought the static variable should "live on" forever -
  char * leg = alsoNotLegal() ;
  leg[ 0 ] = '5' ;
  puts( leg ) ;
}

这两个函数本身并不违法。首先,在这两种情况下,您都返回一个指针的副本,该指针指向具有静态存储持续时间的对象:字符串文字将在整个程序持续时间内生存。

但你的main函数都是关于未定义的行为。不允许您写入字符串文字的内存:)您的 main 函数所做的事情可以简化为等效的行为

"hello"[0] = '5';
"why am I not legal?"[0] = '5';

两者都是未定义的行为,并且在某些平台上会崩溃(很好!)。

Edit:请注意,字符串文字在 C++ 中具有 const 类型(在 C 中则不然):char const[N]。对指向非常量字符的指针的赋值会触发不推荐使用的转换(无论如何,一个好的实现都会发出警告)。因为上面写的是 const 数组won't触发该转换,代码将错误编译。真的,你的代码正在这样做

((char*)"hello")[0] = '5';
((char*)"why am I not legal?")[0] = '5';

Read C++ strings: [] vs * https://stackoverflow.com/questions/308279/c-strings-vs/308724#308724

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

返回对 C++ 中静态局部变量的引用 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • SVG、矢量效果=“非缩放描边”和 IE

    据我了解 SVG 属性vector effect non scaling stroke 如果 当 SVG 对象被缩放或拉伸时 应防止笔划扭曲 变粗或变细 例如 在这个小提琴中 http jsfiddle net 1cj0ovae 5 htt
  • 你能从 Chrome 扩展程序中聚焦弹出窗口吗

    我有一个 Chrome 扩展程序 当单击扩展程序图标时 它会执行 window open 操作 由于 Chrome 中存在不相关的错误 它无法使用传统的 Chrome 扩展弹出窗口 我想知道如果弹出窗口已经打开 是否有办法将其聚焦 Chro
  • 为什么 Carrierwave 会导致 NameError: uninitializedconstant Micropost::PictureUploader 错误?

    在 Hartl Rails 教程章节中13 4 1 基本图片上传 https www railstutorial org book user microposts我们添加了rierwave gem 用于图像上传 但是 在生成上传器并将迁移添
  • SearchAdmin.asmx 的 401 IIS 错误

    我有一个三服务器 SharePoint 2007 MOSS 环境 其中我的 IIS 日志继续受到 401 1 和 401 2 的攻击 这些日志太满了 以至于消耗了我的硬盘 我可以从 IP 看出这些错误来自我的前端 Web 服务器之一的 PO
  • CRC 16 程序计算校验和

    我目前正在编写一个 CRC16 程序 它使用 CRC 16 多项式计算字符的 CRCX 16 X 15 X 2 1 程序应从标准输入读取数据并以十六进制输出 16 位 CRC 尽管如此 当我执行该程序时 我得到了错误的输出值 这是我的代码
  • 是否可以访问 Postgres 中尚未清理的旧版本行?

    如果在 Postgres 中修改了一行 但表尚未被清理 我假设该行的旧版本仍在表中 是否可以访问该行的版本 这通常是不可能的 但由于删除行只不过是一个标志 因此您可以编写一个工具来恢复已删除的行 请注意 索引不会更新 之后必须重新创建 我敢
  • Rails mysql2 未定义方法“accept” for nil:NilClass

    我知道这里已经有一百万次了 但尝试了一切 但我仍然收到此错误 rake db migrate rake aborted undefined method accept for nil NilClass Tasks TOP gt db mig
  • PDO 不会抛出带有未绑定参数的异常(并且查询中没有变量)

    所以我不知道这里发生了什么 link new PDO pgsql dbname name host host user password link gt setAttribute PDO ATTR EMULATE PREPARES fals
  • SQL 表只有一行? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • iOS 14 - 当精确位置权限被拒绝时,如何让 iBeacon 唤醒应用程序?

    我之前在使用 iOS 14 0 时遇到了以下问题 通过后台位置权限我可以 注册iBeacon区域监控 从应用程序切换器杀死该应用程序 点击屏幕即可看到应用程序在控制台中重新启动 应用程序正在运行但不在应用程序切换器中 使用 iOS14 重新
  • PHP 7.4 中的空合并赋值 ??= 运算符是什么

    我刚刚观看了有关即将推出的 PHP 7 4 功能的视频 并看到了这个新功能 操作员 我已经知道了 操作员 这有什么不同 来自docs https wiki php net rfc null coalesce equal operator 合
  • 如何在数组中搜索字符串的一部分?

    我有一个arraylist
  • 从构造函数调用方法:错误:未捕获类型错误:未定义不是函数

    Task 我需要在 Typescript 中构建一个类 在它自己的构造函数中调用它自己的一些方法 Problem 以下示例代码代表的实际代码将成功编译 但在 Javascript 控制台中进行测试时却无法成功编译 Sample export
  • 以编程方式确定汉字的笔画数?

    Unicode 是否存储有关中文 日文或其他基于笔画的字符的笔画计数信息 一点谷歌搜索想出了Unihan zip ftp ftp unicode org Public UNIDATA Unihan zip 发布的文件统一码联盟 http u
  • IntelliJ Idea Maven 项目中 Scala 模块的 Scala 签名错误

    免责声明 我是 Scala 新手 尝试在 IntelliJ IDEA 中使用简单的 scala archtype 创建示例 Scala Maven 项目 IntelliJ 版本是 14 1 2 下面是我的 pom 文件 我确实将 Scala
  • 未找到 GraphViz 的可执行文件:Anaconda-3

    我正在尝试显示树输出 但是当我运行下面的脚本时 我收到如下错误 IncationException 未找到 GraphViz 的可执行文件 我在这里搜索过类似的主题 但其中大多数与 Mac 相关 我使用的是 Windows 10 64 位操
  • 类常量

    我有几个 obj c 类 每个类都需要一些在 switch 语句中使用的常量 我曾尝试使用以下命令在 m 文件中定义这些数字常量 define预处理器指令 所有这些常量都以 kCell 开头 这似乎工作得很好 但 Xcode 的代码感知向我
  • 是否可以设置 git merge 来自动解析? (git 雷雷雷)

    我有 2 台笔记本电脑 其中有一个纯文本文件 该文件必须同步 它用作第三方软件的数据库 客户希望每天同步该文件的内容 第一个想法是制作一个将文件上传到 Dropbox 的脚本 但如果发生冲突 两个用户删除 A 行 第一个用户添加 B 行 第
  • 如何使用slf4j和java.util.logging登录tomcat

    我创建了一个在 Tomcat 8 上运行的 Web 应用程序 一如既往 我想使用 slf4j 在本例中 由 java util logging 支持 因为它是 Tomcat 的默认设置 相关依赖是这样的
  • 返回对 C++ 中静态局部变量的引用

    这个问题只是为了我更好地理解C 中的静态变量 我认为如果将 C 中的局部变量声明为静态 我可以返回对它的引用 因为该变量应该在函数返回后继续存在 为什么这不起作用 include