从其他人那儿学到了这么一个函数,感觉还是有一定的用途。不过,进一步的学习发现这个函数具有一定的不安全性,使用起来还是得注意一下。看起来,在我的嵌入式应用中需要谨慎。
函数测试代码:
#include "stdio.h"
#include "stdint.h"
#include "string.h"
char str_from_nxp[] = "From driverless autos to home automation and industrial IoT, NXP is the partner that prepares you for what’s next.";
int main(void)
{
char *sub_str = NULL;
char *p_str;
char delim_str[] = " ";
printf("raw string: %s\n", str_from_nxp);
p_str = str_from_nxp;
sub_str = strtok(p_str, delim_str);
while (sub_str != NULL)
{
printf("%s\n", sub_str);
sub_str = strtok(NULL, delim_str);
}
return 0;
}
函数的第一个参数是原始的字符串,第二个参数是子字符串。如果迭代开始之后,第一个参数需要改成NULL。返回值是子字符串,也就是分割后的小单元。编译以及运行效果如下:
上面的测试使用的分隔符为空格。
需要注意的是,这个分割字符只能够是一个字符,否则的话分割会出现错误。一个错误的示范如下:
#include "stdio.h"
#include "stdint.h"
#include "string.h"
char str_from_nxp[] = "helloworld.";
int main(void)
{
char *sub_str = NULL;
char *p_str;
char delim_str[] = "ll";
printf("raw string: %s\n", str_from_nxp);
p_str = str_from_nxp;
sub_str = strtok(p_str, delim_str);
while (sub_str != NULL)
{
printf("%s\n", sub_str);
sub_str = strtok(NULL, delim_str);
}
return 0;
}
编译运行效果: