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

C语言跨函数传递char*时直接赋值字符串出现Bus error 10问题咨询

错误原因
  1. C语言中函数参数是值传递,你传入getfilename的fn是main函数中字符数组首地址的副本,属于函数内的局部指针变量。你执行fn = "000.gif"的时候,并没有修改原数组的内容,只是把这个局部指针的指向修改成了字符串常量"000.gif"的存储地址。
  2. C语言的字符串常量默认存储在只读内存段,不允许修改。你修改指针指向后,后续执行fn[4] = 'p'这类写操作就会触发内存访问异常,也就是你遇到的Bus error: 10。另外就算没有崩溃,你修改的只是函数内局部指针的指向,根本不会同步到main函数的原数组,逻辑上也不符合你的需求。
跨函数传递字符串的正确操作

如果你要修改传入的字符数组内容,不能直接给指针赋值,要把字符串内容拷贝到目标数组中,常用两种方法:

  • 用标准库函数strcpy完成字符串拷贝,替换你写的指针赋值语句即可:
    strcpy(fn, "000.gif");
    
    注意要保证目标数组的长度足够容纳待拷贝的字符串+末尾结束符\0,你这里fn长度为8,"000.gif"总长度为8(7个可见字符+1个\0),刚好符合要求。
  • 直接用sprintf实现你要的三位补零文件名生成逻辑,不需要自己手写数字转字符串的循环,代码更简洁不易出错:
    // 直接生成 xxx.gif 格式的三位补零文件名,一行替代你所有逻辑
    sprintf(fn, "%03d.gif", counter);
    

另外补充你现有代码的一个隐患:当counter为0时,log10(counter)是未定义行为,会导致运行出错,更推荐直接用sprintf做格式化处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:57:00