C语言 如何每隔一段长度分割字符串
时间: 2024-11-11 08:14:44 浏览: 22
在C语言中,你可以通过循环遍历字符串,每次检查当前字符是否达到预设的分隔长度,如果达到了就将子串存储起来,直到遍历完整个字符串。下面是一个简单的示例,使用`strlen`获取每个子串的长度并使用`memcpy`进行分割:
```c
#include <stdio.h>
#include <string.h>
#include <malloc.h> // 包含malloc和free,用于动态内存管理
// 分割字符串函数
void split_string(char* str, const char* delimiter, int max_length) {
if (str == NULL || delimiter == NULL) {
printf("Invalid input.\n");
return;
}
char* token = strtok(str, delimiter); // 使用strtok函数分割字符串
while (token != NULL) {
char* sub_str = malloc(strlen(token) + 1); // 分配内存存储子串
if (sub_str == NULL) {
printf("Memory allocation failed.\n");
break;
}
strcpy(sub_str, token); // 复制子串到新内存
printf("%s\n", sub_str); // 输出子串
// 如果子串长度超过max_length,则不再继续分割
if (strlen(sub_str) > max_length) {
printf("Substring exceeds maximum length of %d characters.\n", max_length);
free(sub_str);
break;
}
token = strtok(NULL, delimiter); // 继续下一个子串
}
// 释放已分配的内存
free(sub_str);
}
int main() {
char str[] = "This is a test string, with multiple, comma-separated parts.";
char delimiter[2] = ", ";
int max_length = 15; // 最大子串长度
split_string(str, delimiter, max_length);
return 0;
}
```
注意:`strtok`函数不是线程安全的,对于需要多次调用的地方,最好自己维护状态信息。
阅读全文