You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言移除字符串逗号代码对char*定义字符串表现异常问题

问题根本原因

这个问题的核心是C语言中两种字符串初始化方式的内存属性差异:

  • char str[] = "xxx" 定义的是栈上的可写字符数组:程序会把只读存储区的字符串字面量完整拷贝到栈空间的数组内,对这块内存的读写操作都是合法的。
  • char *str = "xxx" 定义的是指向只读存储区的指针:字符串字面量本身存放在程序的.rodata(只读数据段),操作系统会对这块内存做写保护,任何修改操作都会触发段错误(Segmentation Fault)。

当你调用removeCommasInString(str3)时,函数内的*w++ = *r语句尝试修改只读数据段的内容,直接触发段错误,操作系统当场终止你的进程,所以:

  1. 调用removeCommasInString(str3)之后的printf和puts语句根本没有机会执行
  2. 部分运行环境不会显式输出段错误提示,只会显示进程异常退出,你看到的"exit code 0"大概率是运行环境的显示误差,实际段错误的退出码通常为139。

修复方案

如果要处理str3指向的字符串,需要保证传入函数的内存是可写的,两种常用方式:

  1. 直接改成数组定义,和str、str2保持一致:
char str3[] = "1,000";
  1. 手动分配可写内存,拷贝字符串内容后再处理:
char* str3 = malloc(6); // "1,000"含结束符共6字节
strcpy(str3, "1,000");
// 使用完后记得free(str3)避免内存泄漏

内容的提问来源于stack exchange,提问作者RobK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:54:01