strtok_s 函数概述
strtok_s 是 Windows 平台提供的字符串分割函数,作为 strtok 的安全版本,解决了缓冲区溢出和多线程安全问题。该函数通过引入上下文指针避免静态变量导致的线程竞争,同时增加缓冲区长度参数防止越界访问。
函数原型与参数说明
strtok_s 的函数原型如下:
char* strtok_s(
char* str,
const char* delimiters,
char** context
);
- str: 待分割字符串,首次调用时传入原始字符串,后续调用传入 NULL
- delimiters: 分隔符集合,支持多字符分隔
- context: 上下文指针,保存分割状态信息
基础使用示例
以下代码演示基本分割流程:
#include <stdio.h>
#include <string.h>
int main() {
char input[] = "apple,orange,banana";
char* context = NULL;
char* token = strtok_s(input, ",", &context);
while (token != NULL) {
printf("%s\n", token);
token = strtok_s(NULL, ",", &context);
}
return 0;
}
输出结果:
apple
orange
banana
多分隔符处理
strtok_s 支持同时指定多个分隔符:
char data[] = "192.168.1.1;443|TCP";
char* ctx = NULL;
char* seg = strtok_s(data, ".;|", &ctx);
while (seg != NULL) {
printf("Segment: %s\n", seg);
seg = strtok_s(NULL, ".;|", &ctx);
}
输出结果:
Segment: 192
Segment: 168
Segment: 1
Segment: 1
Segment: 443
Segment: TCP
线程安全实现原理
传统 strtok 使用静态变量保存状态,而 strtok_s 通过 context 参数维护状态。对比以下线程不安全代码:
// 线程不安全的实现
char* unsafe_split(char* str
716

被折叠的 条评论
为什么被折叠?



