为什么在字符指针上使用 strcat 会崩溃? [复制]

2023-11-24

为什么这段代码会崩溃? 正在使用strcat字符指针非法?

#include <stdio.h>
#include <string.h>

int main()
{
   char *s1 = "Hello, ";
   char *s2 = "world!";
   char *s3 = strcat(s1, s2);
   printf("%s",s3);
   return 0;
}

请给出引用数组和指针的正确方法。


问题是s1指向一个字符串文字,并且您试图通过附加来修改它s2到它。不允许您修改字符串文字。您需要创建一个字符数组并将两个字符串复制到其中,如下所示:

char *s1 = "Hello, ";
char *s2 = "world!";

char s3[100] = ""; /* note that it must be large enough! */
strcat(s3, s1);
strcat(s3, s2);
printf("%s", s3);

“足够大”意味着至少strlen(s1) + strlen(s2) + 1. The + 1是为了解释空终止符。

话虽这么说,你应该认真考虑使用strncat(或者可以说更好但非标准strlcat,如果可用的话),这是边界检查的,因此远远优于strcat.

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

为什么在字符指针上使用 strcat 会崩溃? [复制] 的相关文章

  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 您可以从基本 Win32 控制台模板应用程序中的 C#/Winrt 组件调用(不是 WinForm/abstractions/wrappers 或使用 C++/Winrt 模板)吗?)

    我有一个现有的程序 win32 x86 控制台应用程序 需要调用托管代码 来自 Net 的 C dll The dll不暴露给 COM 但可以从 C WinRT 组件调用并由 C WinRT 控制台模板应用引用 BUT即使安装了 C Win
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall

随机推荐

  • 每天在特定时间重复闹钟(闹钟管理器)

    您好 我希望我的应用程序每天在特定时间运行 为此 我使用下面的代码 但它只运行一次 这里有什么错误我怎样才能完成这个任务 AlarmManager alarmMgr0 AlarmManager getSystemService Contex
  • 不允许异步锁

    基本上 我想向 TCP 服务器发出多个异步请求 我目前有一个工作客户端 它只是同步的 并且会阻止每个网络调用的 UI 由于多个请求可能几乎同时发生 我尝试这样做 private object readonly readLock new ob
  • 如何正确让无模式表单出现在任务栏中

    我正在努力实现古老的 Delphi 梦想 即在任务栏中显示无模式窗体 是什么correct如何让无模式窗体出现在任务栏中 研究工作 这些是我为解决问题所做的尝试 要让它发挥作用需要很多东西正确地 仅仅在任务栏上显示一个按钮并不是解决方案 我
  • 如何打印状态栏和百分比?

    要实现如下状态栏 45 60 100 我希望将其打印到标准输出 并不断刷新它 而不是打印到另一行 这个怎么做 The r 字符 回车 将光标重置到行的开头 并允许您覆盖该行之前的内容 from time import sleep impor
  • 使用 OpenCV 计算黑色像素

    我工作于opencv 2 4 0 and C 我正在尝试做一个练习 要求我加载 RGB 图像 将其转换为灰度并保存新图像 下一步是将灰度图像转换为二值图像并存储该图像 我的工作就这么多 我的问题是计算二进制图像中黑色像素的数量 到目前为止
  • .rodata 部分加载到可执行页面中

    所以出于好奇 我今天尝试运行这段代码 用gcc m32 1 c int main void EB is the opcode for jmp rel 8 FE is hex for 2 So this is essentially an i
  • 查找枚举值中设置的最高标志

    我使用带有 flags 属性的枚举作为跟踪状态的方式 示例如下 Created 1 Completed 2 Dispatched 4 在不写任何过于严格的内容的情况下 如果检查这个 则执行那个 如果检查那个 则执行此操作 我希望能够找到已设
  • 使用 C# 以编程方式打开超级按钮栏、电源栏和开始菜单

    如何以编程方式打开 魅力酒吧 电源选项 开始菜单 在 Windows 8 中 我希望能够从我的 C 应用程序中打开它们 找不到我需要的文档 Thanks 我敢打赌发送 Windows 密钥 以及其他密钥 根据需要 就足够了 这是关于如何通过
  • 如何更改默认 LLDB 设置

    有时我需要使用 LLDB 打印长字符串 默认 LLDB 设置会修剪打印的字符串 我必须输入以下内容 set set target max string summary length 10000 下次运行时 此设置不会保留 有没有办法设置它以
  • Tinymce html5占位符通过从textarea读取属性

    对于标准文本区域我使用这个plugin创建一个占位符 我如何扩展tinymce 以便它也以这种方式工作 例如 默认值是从 textarea 属性中读取的 然后在用户聚焦于 iframe 时清除 与 CKEditor 类似 http alfo
  • 传递的数组会丢失除第一个元素之外的所有元素

    我有一个奇怪的问题 我最近将我的应用程序从本地 xampp 安装迁移到 SUSE Enterprise Server 11 一切正常 但这一件事让我发疯 我找不到解决方案 使用以下语法通过 GET 或 POST 传递数组时 search d
  • 单引号字符串字符串插值

    我正在尝试使用 Rails 在 ActionMailer 中设置电子邮件地址 在硬编码之前 但我们现在希望将它们设为 ENV 变量 这样我们就不需要每次电子邮件更改时都修改代码 目前的定义方式如下 from Name of Person l
  • cmake:读取并编译动态生成的 cpp 文件列表

    我有一个自定义工具 可以处理给定的 IDL 文件列表并生成许多 cpp 和 h 文件作为输出 我想将这些文件添加到要在我的 CMakeLists 中编译的内容列表中 并对这些文件对 IDL 的依赖关系进行建模 为了简单起见 我将声明对任何
  • 在 JSP 中启用 JavaServerPages 标准标记库 (JSTL)

    我觉得我错过了一些东西 从表面上看 JSP 开箱即用 支持标签 如这个问题的答案显示 这个人问了一个纯 jsp 问题并得到了涉及标签的答案 但是如果我尝试运行给定的代码
  • 如何在角度材料日期选择器上添加蒙版

    我最近开始使用角度材料来构建角度形式 其中我需要使用角度材料日期选择器 但无法在输入元素上添加任何掩码 我希望用户只能输入数字并在输入时将其格式化为日期格式 MM DD YYYY html div class example contain
  • 从文本文件中删除空行[重复]

    这个问题在这里已经有答案了 我有一个文本文件 其中有一些空行 意思是上面没有任何东西并且只是占用空间的线条 它看起来像这样 The quick brown fox jumped over the lazy dog 我需要它看起来像这样 Th
  • C++ 如何避免浮点运算错误[重复]

    这个问题在这里已经有答案了 我正在编写一个以浮点数递增的循环 但我遇到了以下示例所示的浮点算术问题 for float value 2 0 value lt 2 0 value 0 2 std cout lt lt value lt lt
  • 使用中央数据库在多用户环境中更新实体框架数据

    让我解释一下标题 我在应用程序中使用实体框架代码优先 测试应用程序 出于调试目的TestApp连接到 SQLExpress 数据库 中央数据库服务器 为了简单起见 数据库包含一张表 Products TestApp 在数据网格中显示数据库中
  • 创建文件时出现 System.UnauthorizedAccessException

    我试图编写代码以便记录错误消息 我试图用日期命名该文件 并希望每天创建一个新的日志文件 经过一番查看后 我得到了以下代码 class ErrorLog public void WriteErrorToFile string error ht
  • 为什么在字符指针上使用 strcat 会崩溃? [复制]

    这个问题在这里已经有答案了 为什么这段代码会崩溃 正在使用strcat字符指针非法 include