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

字符数组出现垃圾值问题咨询:无需扩容的修复方案

问题根源排查与修复方案

嘿,我帮你找到了问题的核心——根本不是数组大小不够,而是代码里有几个关键的内存初始化错误和数组声明错误,这些才是导致垃圾值出现的元凶。咱们一步步来解决:

1. 先修正main函数里的数组声明错误

你在main里写的:

char *fullPath[150];

这是一个装了150个char指针的数组,根本不是用来存文件路径的字符数组!正确的写法应该是:

char fullPath[150];

而且用scanf读输入的时候,不需要加&——数组名本身就是指向首元素的指针,改成:

scanf("%s", fullPath);

之前的错误写法会让你把输入写到错误的内存区域,这已经是个严重的内存问题了。

2. 修复CopyNewFile里未初始化的字符数组

在CopyNewFile函数里,你声明了:

char fullDir[350];
char file[60];

这两个数组都是未初始化的,内存里会残留随机的垃圾值。而strncat是从目标字符串的\0位置开始追加内容,但未初始化的数组里没有这个终止符,所以strncat会从随机位置开始追加,甚至会读到数组外的垃圾数据。

解决方法很简单,初始化这两个数组为空字符串,确保它们的首字符是\0:

char fullDir[350] = ""; // 或者用 {0} 把所有元素初始化为0
char file[60] = "";

这样strncat就会从数组开头正确追加内容,再也不会带垃圾值了。

3. 额外的小优化(避免潜在问题)

  • 在CheckDirectory里,char answer[2];搭配scanf("%s", &answer);有缓冲区溢出风险:如果用户输入超过1个字符,就会超出数组范围。可以改成scanf("%1s", answer);,限制只读1个字符,或者用getchar()来读取单个字符。
  • 使用strncat时,要确保目标数组的剩余空间足够容纳追加的内容,不过你现在的数组大小已经足够,这点没问题。

验证修复

做完这些修改后,哪怕你把fullDir设为300甚至更小(只要能装下你的路径长度),也不会出现垃圾值了——因为我们解决了根本的初始化问题,而不是靠扩容来掩盖错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:45:04