结构体中字符串末尾出现"\common Files"的原因排查
结构体字符串复制后出现多余内容的解决方法
问题核心原因:
C语言字符串依赖\0作为结束标志,你的循环仅复制了name_size个字符,未在结构体数组末尾添加\0,导致后续内存中的随机数据(如你看到的"\common Files")被误判为字符串的一部分。此外需确认name_size是否为输入字符串的实际长度(而非数组总长度),避免复制未初始化的内存内容。修复方案:
- 手动补充字符串结束符:
// 确保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'; - 使用标准库函数简化操作(更安全高效):
// 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
相关产品推荐
相关产品推荐

