尝试访问 C 中字符串上的字符时出现总线错误

2023-11-25

我已经多次使用这行代码(更新:当字符串是函数的参数时!),但是当我现在尝试这样做时,我收到总线错误(无论是使用 gcc 还是 clang)。我正在重现最简单的代码;

char *string = "this is a string";
char *p = string;
p++;
*p='x'; //this line will cause the Bus error
printf("string is %s\n",string);

为什么我无法使用 p 指针更改字符串的第二个字符?


您正在尝试修改只读内存(存储字符串文字的位置)。如果需要修改该内存,可以使用字符数组。

char str[] = "This is a string";
str[0] = 'S'; /* works */

我已经多次使用这行代码了..

我当然希望不会。最多你会得到一个段错误(我说“最好”是因为尝试修改只读内存是未指定的行为,在这种情况下任何事情都可能发生,而崩溃是可能发生的最好的事情)。

当您声明一个指向字符串文字的指针时,它指向数据段中的只读内存(如果您愿意,请查看汇编输出)。将您的类型声明为 char[] 会将该文字复制到函数的堆栈上,这反过来又允许在需要时对其进行修改。

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

尝试访问 C 中字符串上的字符时出现总线错误 的相关文章

随机推荐

  • 如何使用 string.Substring(char, char) 代替 string.Substring(int, int)?

    我制作了返回介于之间的字符串的扩展方法leftChar and rightChar public static string Substring this string This char leftChar char rightChar i
  • 我需要什么权限才能从 Android 应用程序访问互联网?

    运行我的应用程序时出现以下异常 java net SocketException Permission denied maybe missing INTERNET permission 如何解决权限缺失的问题 Add the INTERNE
  • 设置断点并调试评估的 JavaScript

    I am using client side JS to parse XML files and generate complex JS code to eval as a result Generating re usable funct
  • git-apply 或 git-am 应该得出相同的哈希值吗?

    我想我错过了一些东西 我的印象是 git 使用 SHA 1 哈希提交标识符意味着可以确定从其他人那里获得的该提交的补丁没有被更改 进行我在我的机器上所做的测试 显然 姓名和电子邮件已更改 cd dogcatcher dogcatcher g
  • Python 3 asyncio 与 aioboto3 似乎是连续的

    我正在将一个简单的 python 3 脚本移植到 AWS Lambda 该脚本很简单 它从十几个 S3 对象收集信息并返回结果 使用的脚本multiprocessing Pool并行收集所有文件 尽管multiprocessing不能在 A
  • StatusCodeException 对比GWT 中的运行时异常

    在我的 GWT 应用程序中 我重写了 RemoteServiceServlet 以在调用服务方法之前检查会话是否有效 我试图从服务器抛出 RuntimeException expired session 我希望客户端从 asynccallb
  • Python Tkinter 文本区域将光标设置为结束

    我有一个 TkinterText 对象 我使用以下方法向其添加行 insert END string 当文本填充可用区域时 我希望它向下滚动以显示视图中文本的底行 但它不会滚动 意味着用户必须滚动自己才能看到最新的文本 我已经看过了mark
  • setuid 和 seteuid 函数的区别

    程序 1 setuid 示例 include
  • 从 .NET Windows 服务调用 Shell32.dll

    我有一个 NET 4 0 库 它使用 Shell32 和 Folder GetDetailsOf 从 WTV 文件获取元数据 我已成功地将它与控制台和 Windows 窗体应用程序一起使用 没有出现任何问题 但由于某种原因 当从 NET 4
  • 为什么 sed 替换 + 重定向删除了我的文件?

    我正在使用 sed 搜索并替换 bash 文件中的两个字符串 GNU sed 这是之后的文件 rw r r 1 websync www data 4156 mar 27 12 56 home websync tmp sitio oficia
  • 在哪里可以获取有关 JavaScript 函数的对象参数语法的信息?

    如果我想调用这样的函数 moo a 4 通常我必须这样表述我的函数定义 function moo myArgObj print myArgObj a 但是这个很棒的语法在 Spidermonkey 中用于定义函数是完全有效的 functio
  • GAS 性能比其他服务器端 JavaScript 慢

    正在研究一个Google Sites网站 它从电子表格中获取数据并动态构建多个图表 我提到 Google Apps 脚本运行速度相当慢 我分析了代码并对其进行了优化 方法是使用Cache服务 只要有可能 优化后 图表代码大约需要花费时间 3
  • 仅授予对 postgreSQL 中一个模式的访问权限

    我有一个用户just one schema user 在我的数据库中 我有两个模式 public and sample 我怎样才能让这个用户只看到sample 这就是我所做的 GRANT USAGE ON SCHEMA sample TO
  • 如何判断两个物体是否相交?

    我使用以下代码来创建对象并为其设置动画 For creating two imageview UIImageView bbl1Obj UIImageView alloc initWithFrame CGRectMake 34 77 70 7
  • Codeigniter 中的挂钩

    如何在 CodeIgniter 中仅调用少数控制器而不是所有控制器的钩子 例如 我只想为管理部分运行挂钩 我怎样才能实现这个目标 在您希望有选择地运行的挂钩中 您可以使用以下命令访问 ci 超级对象 this gt ci get insta
  • CKEditor 4 - 如何设置默认字体?

    我使用 CKEditor 4 我想设置默认字体 我用我的字体选择添加了 font defaultLabel 但它不起作用 我在互联网上找到了这个解决方案 但这对我来说是一个技巧 而不是真正的解决方案 CKEDITOR on instance
  • 如果记录存在,则更新,否则插入

    我正在尝试在两个 SQL Server 2008 表之间移动一些数据 如果表 2 中存在包含表 1 中的电子邮件的记录 则使用表 1 中的数据更新该记录 否则插入新记录 在表 1 中 我有很多列 名字 姓氏 电子邮件等 我不太确定如果表 1
  • 使用 WinSCard 获取 PCSC 读卡器序列号

    如果读卡器中没有卡 我在获取 PCSC 读卡器序列号时遇到问题 我正在使用winscard dll 和c 以下代码仅适用于读卡器中存在卡的情况 否则 不会检索 SCardHandle 我还没有找到任何其他方式来获取 SCardHandle
  • Firestore REST API 数据库监听

    您知道如何使用 REST API 设置 Firestore 监听吗 这是我的尝试 url https firestore googleapis com v1beta1 projects project name databases defa
  • 尝试访问 C 中字符串上的字符时出现总线错误

    我已经多次使用这行代码 更新 当字符串是函数的参数时 但是当我现在尝试这样做时 我收到总线错误 无论是使用 gcc 还是 clang 我正在重现最简单的代码 char string this is a string char p strin