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

使用C语言strsep函数分割字符串时首元素输出异常,求解答

问题原因:缓冲区溢出导致字符串未正确终止

你的问题核心是数组元素长度不足,引发缓冲区溢出,破坏了字符串的终止规则,具体拆解如下:

  1. 第一个待分割的token是" teste-13-f8-04",包含开头空格在内一共15个可见字符,但C语言字符串必须以'\0'作为结束标志,这意味着存储该字符串至少需要16字节的空间。
  2. 你定义的AllHostName[32][15]每个元素仅分配了15字节,当用strcpy复制15个字符的token时,没有多余空间存放'\0',导致AllHostName[0]成为没有终止符的“非法字符串”。
  3. 溢出的内容会覆盖相邻的AllHostName[1]起始位置,当printf打印AllHostName[0]时,会持续读取内存直到遇到'\0',因此会把AllHostName[1]的内容也一并输出,最终出现teste-13-f8-04teste-13-fd-80这种拼接结果。

修复方案

方案1:扩大目标数组的元素长度

直接调整AllHostName的定义,确保每个元素能容纳最长的token加上终止符:

char AllHostName[32][16]; // 或设置为20等更大值,留足余量

方案2:使用安全的字符串复制函数

如果不想调整数组长度,改用strncpy并手动添加终止符,避免溢出风险:

// 在splitStrings函数的循环中替换strcpy为:
strncpy(variable[i], token, 14); // 仅复制14个字符,预留1个位置给'\0'
variable[i][14] = '\0'; // 手动添加字符串终止符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:55:15