手把手教你编写 C 语言字符串分离函数,避免内存泄漏与越界!
```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义字符串分离函数 char split(char *str, char *splitor) { int count = 0; // 记录分离后的字符串数量 char *p = str; // 临时指针 char *token; // 先计算分离后的字符串数量 while ((token = strtok(p, splitor))!= NULL) { count++; p = NULL; } // 为分离后的字符串数组分配内存 char result = (char )malloc((count + 1) * sizeof(char *)); // 重置指针 p = str; int i = 0; // 进行实际的分离操作并存入结果数组 while ((token = strtok(p, splitor))!= NULL) { result[i] = (char *)malloc(strlen(token) + 1); strcpy(result[i], token); i++; p = NULL; } result[count] = NULL; // 以 NULL 结尾 return result; } int main() { char str[] = "apple,banana,cherry"; char splitor[] = ","; char splitResult = split(str, splitor); // 输出分离后的结果 int i = 0; while (splitResult[i]!= NULL) { printf("%s\n", splitResult[i]); free(splitResult[i]); // 释放每个字符串的内存 i++; } free(splitResult); // 释放结果数组的内存 return 0; } ``` 额外需要注意的逻辑点: 1. 要确保输入的字符串和分隔符有合理的值,避免空指针或异常字符。 2. 内存的分配和释放要匹配,避免内存泄漏。 3. 处理字符串长度时要小心,防止越界访问。 ######[AI写代码神器 | 454点数解答 | 2024-12-09 21:37:47]
- C 语言实现链表操作:创建、输出、删除及插入功能详解(字节豆包 | 534点数解答 | 2024-12-09 21:33:48)364
- C语言实现链表创建、输出、删除与插入操作的完整代码及注意要点(字节豆包 | 609点数解答 | 2024-12-18 12:18:21)380
- C++ 求解:最少操作次数让字符串无子串 “friend” (字节豆包 | 153点数解答 | 2024-08-17 16:29:54)499
- C++ 求解:最少操作次数让字符串不再含 “friend” 子串!(讯飞星火 | 260点数解答 | 2024-08-17 16:30:49)483
- Python 巧解:最少操作次数让字符串告别“friend”子串(字节豆包 | 139点数解答 | 2024-08-18 13:04:14)426
- 3414 数字游戏:Python 求解 8 位 01 字符串中 1 的个数 (字节豆包 | 106点数解答 | 2024-10-27 14:23:27)446
- 巧用字符添加,计算字符串中“our”最大数量及开发注意要点(DeepSeek | 376点数解答 | 2025-10-30 19:20:06)96
- C 语言实现:处理字符串生成最多 “our” 串,附代码及关键开发注意点 (DeepSeek | 257点数解答 | 2025-10-30 19:20:36)130
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- JS 代码:轻松定义变量 test 并赋值为“red”( | 6点数解答 | 2024-05-19 20:46:45)396
- JS 代码:轻松定义含“Saab、Volvo、BMW”的数组变量 mycars( | 14点数解答 | 2024-05-19 20:47:47)430
- JS 代码:判断“red”改值为“green”并弹窗显示结果( | 176点数解答 | 2024-05-20 21:33:04)432