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

结构体中字符串末尾出现"\common Files"的原因排查

结构体字符串复制后出现多余内容的解决方法
  • 问题核心原因:
    C语言字符串依赖\0作为结束标志,你的循环仅复制了name_size个字符,未在结构体数组末尾添加\0,导致后续内存中的随机数据(如你看到的"\common Files")被误判为字符串的一部分。此外需确认name_size是否为输入字符串的实际长度(而非数组总长度),避免复制未初始化的内存内容。

  • 修复方案:

    1. 手动补充字符串结束符:
      // 确保name_size是temp_name的有效字符长度(例如通过strlen(temp_name)获取)
      for (u32 i = 0; i < name_size; i++)
      {
          pn->name[i] = temp_name[i];
      }
      // 必须添加结束符,同时保证pn->name的长度足够容纳该字符
      pn->name[name_size] = '\0';
      
    2. 使用标准库函数简化操作(更安全高效):
      // strcpy自动复制结束符,需保证pn->name长度 >= strlen(temp_name)+1
      strcpy(pn->name, temp_name);
      
      // 若担心缓冲区溢出,用strncpy并手动补结束符
      strncpy(pn->name, temp_name, sizeof(pn->name)-1);
      pn->name[sizeof(pn->name)-1] = '\0';
      
  • 额外注意事项:

    • 结构体中的name数组长度必须至少比输入字符串长度多1,预留\0的存储空间,否则会引发缓冲区溢出,导致未知错误。
    • 获取用户输入时,需限制输入长度不超过临时数组temp_name的容量,避免输入溢出污染内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:34:49