strtok_s 与strtok_r 函数的区别
时间: 2023-11-15 20:56:01 浏览: 387
strtok_s 和 strtok_r 都是用于分割字符串的函数,但是它们有以下几点区别:
1. strtok_s 是 C11 标准中新增的函数,而 strtok_r 是 POSIX 标准中定义的函数。
2. strtok_s 函数在使用时需要指定一个额外的参数,即指向保存上一次分割位置的指针,而 strtok_r 函数则将这个指针作为函数参数传入。
3. strtok_s 函数是线程安全的,而 strtok_r 函数则不是。
相关问题
strtok_r函数用法
strtok_r函数是一个字符串分割函数,用于将一个字符串按照指定的分隔符进行分割,并返回分割后的子字符串。它的用法如下:
```c
char *strtok_r(char *str, const char *delim, char **saveptr);
```
其中,参数说明如下:
- `str`:要分割的字符串。
- `delim`:分隔符字符串,可以包含多个字符。
- `saveptr`:保存分割状态的指针,需要传入一个指向char指针的变量的地址。
函数的返回值为分割后的子字符串,如果没有找到分隔符,则返回NULL。
使用strtok_r函数进行字符串分割的一般步骤如下:
1. 第一次调用时,将待分割的字符串传入str参数。
2. 后续调用时,将str参数设置为NULL。
3. 在每次调用时,会返回一个子字符串,并将saveptr指向下一个子字符串的起始位置。
下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World! CSDN";
const char delim[] = " ,!";
char *token;
char *saveptr;
token = strtok_r(str, delim, &saveptr);
while (token != NULL) {
printf("%s\n", token);
token = strtok_r(NULL, delim, &saveptr);
}
return 0;
}
```
输出结果为:
```
Hello
World
CSDN
```
strtok_s函数怎么代替strtok函数
strtok_s函数是strtok函数的安全版本,可以用来代替strtok函数。strtok_s函数需要传入一个指向字符串的指针、一个分隔符字符串和一个指向指针的指针。在第一次调用时,指向字符串的指针指向要分割的字符串,指向指针的指针为NULL。在后续调用中,指向字符串的指针为NULL,指向指针的指针为第一次调用时的指针。strtok_s函数返回一个指向分割后的字符串的指针,如果没有分割的字符串,则返回NULL。下面是一个使用strtok_s函数的例子:
```
char str[] = "A string\tof ,,tokens\nand some more tokens";
char* next_token = NULL;
char* token = strtok_s(str, " ,\t\n", &next_token);
while
阅读全文