如何检测字符串文字传递给 C 中的函数?

2024-01-22

我正在尝试实现 Perl 的等效版本chomp()C 中的函数,我遇到了一个极端情况,其中作为参数传递的字符串文字将导致分段错误(理所当然)。

Example chomp("some literal string\n");

C99 中是否有一种定义的方法来检测我的函数是否传递了字符串文字,以便我可以return而不尝试将其取消?

char* chomp(char *s)
{
    char *temp = s;

    if (s && *s)
    {
        s += strlen(s) - 1;
        if (*s == '\n')
        {
            *s = '\0';
        }
    }
    return temp;
}

C99 中是否有一种定义的方法来检测我的函数是否传递了字符串文字,以便我可以返回而不尝试将其 NUL 出来?

你不应该。

你的 API 不应该试图为调用者捏造东西,只会让它在以后崩溃。如果来电者违反了规则,他们应该当场发现。

如果调用者将不可变字符串传递给需要可变字符串的函数,则它should段错误。其他任何东西都是糟糕的设计。

(附录:当然,最好的设计是返回调用者负责释放的字符串的副本。)

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

如何检测字符串文字传递给 C 中的函数? 的相关文章

  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 私有模板函数

    我有一堂课 C h class C private template
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 有没有像 Python 的 easy_install 这样的 Java 包管理器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有包管理器 http en wikipedia org wiki Package manager对
  • “此方法已被弃用”对于应用程序开发人员意味着什么

    我看到不少好旧有用的方法 http developer android com reference android webkit WebView PictureListener html onNewPicture 28android web
  • Web 服务或 Web 服务

    我正在创建一个应用程序 该应用程序将与安装 WCF Web 服务的单个服务器进行通信 我对这个过程有点陌生 想知道从长远来看 这两个选项中哪一个更适合处理大量用户的负载 1 在多核服务器上创建并安装单个 Web 服务 以便所有客户端应用程序
  • Chrome PDF 查看器下载按钮在 window.open() 选项卡上不起作用

    我正在开发一个项目 它将 http 请求发送到 spring boot 作为回应 我收到了带有 PDF 文件的流 我需要在新选项卡中打开此文件 并使用 Chrome PDF 查看器的所有功能 尤其是下载功能 这是我处理响应并打开包含收到的
  • 如何将 Ruby on Rails 生产挂载点包含在电子邮件的 url_helpers 中?

    tl dnr 我的页面链接很好 但链接到非页面文本 电子邮件 缺少生产应用程序安装点 detail 我的 RoR 应用程序在开发和生产中使用略有不同的 URL 在开发中 顶级实体是资源模型 http localhost 3000 ENTIT
  • 如何从 Intellij IDEA 中删除指向旧/丢失源的(虚拟)断点?

    使用 Intellij v14 和现在的 v15 我设置了断点来调试来自 Tomcat 7 中运行的 Web 应用程序的外部依赖项 通常是快照版本 的尚未发布的类 当我将该外部依赖项更改为发布版本时 重新编译项目并在调试模式下运行 即使断点
  • Swift Codable - 解析可以包含不同数据类型的 JSON 数组

    我正在尝试解析一个 JSON 数组 它可以是 config data name illuminate config title Blink name shoot config title Fire 或者它可以是以下类型 config dat
  • 在 Solaris 上构建 Boost

    Boost 会完全构建在 Solaris 上吗 在我去支付支持合同以将 Sun Studio 12 2 修补到最新版本之前 我想知道是否有人在这方面取得了成功 特别是 Proto Spirit 我遇到了一些错误 有些错误看起来已经在补丁中解
  • c# 将图像(缩放)绘制为图形,无法正确插值。修复?

    我有一个 1px 宽和一定高度的图像 我需要在其 OnPaint 事件上在控件的整个宽度上绘制此图像 我可以绘制它 但不正确 看起来当它拉伸它时 它实际上并没有填充所有像素 就好像插值关闭一样 有没有办法说 别再自作聪明了 直接画出来吧 我
  • NG-bootstrap 和 Angular 9 兼容性

    升级到 Angular 9 后 我收到以下与 ng bootstrap 相关的错误 src app shared Components form controls dropdown select dropdown select compon
  • 我需要解决 Excel 猜测数据类型问题

    我正在创建一个实用程序来将数据从 Excel 导入到 Oracle 数据库 我有一个固定的 Excel 文件模板 现在 当我尝试通过 Jet 提供程序和 ADO Net Ole 连接工具导入数据时 我发现以下问题 有一些列尚未导入 因为它们
  • 宏未显示在宏表中

    我正在 excel 2016 中编写 VBA 宏 我编写的带有参数的宏不会显示在宏表中 仅显示那些没有参数的宏 帮助 带参数的宏在宏框中不可见 因为将它们放在那里没有意义 如果它们需要参数来运行 则无法从宏框中运行它们 因为无法向相关宏提供
  • .net 对象平等

    假设我们有两个对象 o1 和 o2 定义为 System Object 在我的情况下 o1 和 o2 可以是以下任何类型 String Int32 Double Boolean DateTime DBNull 那么我如何检查 o1 和 o2
  • 无效的 Podfile 文件意外模板 EOS

    我已经与这个错误作斗争好几天了 试图开始一份新工作 尝试在 React Native cli 项目上运行 pod install 时遇到问题 我已经尝试了这里所有可能的解决方案 但不适用于我的 错误 Invalid Podfile file
  • 用于匹配“A-Z、a-z、0-9、_”和“.”的正则表达式

    我需要一个正则表达式 它只允许输入 A Z a z 0 9 字符和点 I tried A Za z0 9 但是 这没有用 我该如何修复它 A Za z0 9 从字符串的开头到结尾 匹配这些字符中的一个或多个 Edit 注意 and 匹配 a
  • 任意多边形中最大的内接矩形

    我使用 OpenCV Stitching 已经有一段时间了 现在我想做拼接的最后一步 裁剪图像 这就导致找到一般多边形中最大的内接轴平行矩形 我已经用谷歌搜索并找到了一些答案 如何在 OpenCV 中裁剪到最大的内部边界框 https st
  • Flex 中继器和事件监听器

    乍一看 Repeater 控件看起来非常强大 但现在我有了新的想法 手头的问题 为子级添加事件监听器 Repeater 对象绑定到 ArrayCollection 并对其进行迭代 为每个项目创建新的 Vbox 子项 现在 对于每个孩子 Re
  • 当目录存在时,htaccess 重定向无法重定向

    为了制作友好的 URL 以下是应用的 htaccess 代码 RewriteEngine On RewriteCond THE REQUEST php s NC RewriteRule F RewriteRule index php id1
  • 将包含 NaN 的 Pandas 列转换为 dtype `int`

    我将数据从 csv 文件读取到 Pandas 数据框 如下所示 对于其中一列 即id 我想将列类型指定为int 问题是id系列有缺失 空值 当我尝试投射时id在读取 csv 时将列转换为整数 我得到 df pd read csv data
  • 如何检测字符串文字传递给 C 中的函数?

    我正在尝试实现 Perl 的等效版本chomp C 中的函数 我遇到了一个极端情况 其中作为参数传递的字符串文字将导致分段错误 理所当然 Example chomp some literal string n C99 中是否有一种定义的方法