如何在C语言中编写类似JavaScript的split函数?
在C语言中实现类似JavaScript的split函数
你原代码存在几个关键问题,导致只能获取第一个元素:
- 拼接单词时未给
word添加字符串结束符\0,C语言要求字符串必须以\0结尾,否则strcpy会读取垃圾数据甚至触发错误 - 循环结束后没有处理最后一个单词(因为最后没有分隔符空格)
- 函数参数定义了分隔符
s,但代码里硬写了' ',未使用传入的参数
修正后的代码如下:
#include <stdio.h> #include <string.h> typedef char str[100]; void split(str all, str target[], char s) { size_t n = strlen(all); int targetN = 0; str word; int iw = 0; for (int i = 0; i < n; i++) { if (all[i] == s) { // 给当前单词添加结束符,确保是合法C字符串 word[iw] = '\0'; strcpy(target[targetN], word); // 重置单词索引 iw = 0; targetN++; } else { word[iw] = all[i]; iw++; // 防止word数组溢出,可添加边界判断 if (iw >= 99) break; } } // 处理最后一个无分隔符结尾的单词 if (iw > 0) { word[iw] = '\0'; strcpy(target[targetN], word); targetN++; } for (int x = 0; x < targetN; x++) { printf("\n %d %s", x, target[x]); } } // 测试示例 int main() { str input = "we have good days"; str result[10]; // 假设最多分割为10个单词 split(input, result, ' '); return 0; }
关键修改说明:
- 遇到分隔符时,先给
word补\0再执行strcpy,保证操作的是合法字符串 - 循环结束后检查
iw是否大于0,处理最后一个未被分割的单词 - 将硬编码的
' '替换为参数s,让函数支持自定义分隔符 - 添加了
word数组的溢出防护,避免越界访问
内容的提问来源于stack exchange,提问作者user21245217
相关产品推荐
相关产品推荐

