strtok_r用法
时间: 2023-11-30 21:41:37 浏览: 37
strtok_r函数是C语言中的字符串处理函数,用于将字符串分割成多个子字符串。它的用法如下:
```c
char *strtok_r(char *s, const char *delim, char **saveptr);
```
其中,参数s是要分割的字符串,参数delim是分隔符,参数saveptr是一个指向指针的指针,用于保存分隔符下一位的指针。
下面是一个示例演示strtok_r的用法:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello,World!How,are,you?";
char *token;
char *saveptr;
token = strtok_r(str, ",", &saveptr);
while (token != NULL) {
printf("%s\n", token);
token = strtok_r(NULL, ",", &saveptr);
}
return 0;
}
```
运行上述代码,输出结果为:
```
Hello
World!How
are
you?
```
这个示例中,我们使用逗号作为分隔符,将字符串"Hello,World!How,are,you?"分割成多个子字符串,并逐个打印出来。
相关问题
strtok_r 用法
strtok_r是C语言中用于分割字符串的函数,它是strtok的线程安全版本。它的使用方法如下[^1]:
```c
char *strtok_r(char *s, const char *delim, char **ptrptr);
```
- 参数s是要分割的字符串,第一次调用时传入待分割的字符串,后续调用时传入NULL。
- 参数delim是分割字符串的分隔符。
- 参数ptrptr是一个指向指针的指针,用于保存剩下待分割的字符串。
下面是一个示例演示了strtok_r的用法:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello,World,How,Are,You";
char *token;
char *saveptr;
token = strtok_r(str, ",", &saveptr);
while (token != NULL) {
printf("%s\n", token);
token = strtok_r(NULL, ",", &saveptr);
}
return 0;
}
```
输出结果为:
```
Hello
World
How
Are
You
```
strtok_r和strtok_s 该怎么使用
strtok_r 和 strtok_s 都是用来分割字符串的函数。它们的功能大致相同,但用法略有不同。
strtok_r 函数是线程安全的。它需要传入三个参数,分别是待分割的字符串、分隔符、以及一个指向静态字符型指针的指针,用来存储当前的分割状态。每次调用 strtok_r 函数时,它都会返回一个指向下一个子字符串的指针。示例代码如下:
```
char str[] = "This is a sample string.";
char *token, *saveptr;
token = strtok_r(str, " ", &saveptr);
while (token != NULL) {
printf("%s\n", token);
token = strtok_r(NULL, " ", &saveptr);
}
```
strtok_s 函数是 Microsoft Visual Studio 提供的安全版本的 strtok 函数。它还需要传入一个额外的参数 max\_tokens,表示最多分割多少个子字符串。示例代码如下:
```
char str[] = "This is a sample string.";
char *token, *next_token;
char delimiters[] = " ";
errno_t err;
token = strtok_s(str, delimiters, &next_token);
while (token != NULL) {
printf("%s\n", token);
err = strtok_s(NULL, delimiters, &next_token);
}
```
需要注意的是,strtok_s 函数只在 Microsoft Visual Studio 中可用,如果在其他平台上编译可能会遇到问题。