strtok()函数与strtok_r()函数
来源:互联网 发布:求质数的算法 编辑:程序博客网 时间:2024/05/29 14:38
strtok函数不是你在程序中应该仿效的模型,strtok 在函数使用内部静态变量记录字符串中下一个需要解析的标记的当前位置。但是,由于指示这个位置的变量值有一个,那么,在同一个程序中出现多个解析不同字符串的strtok调用时,对各自的字符串的解析就可能会相互的干扰。如:对“a/bbb///ccc;xxx:yyy:” 分别进行":;"和"/"解析。
代码如下strtok:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *str1, *str2, *token, *subtoken;
char *saveptr1, *saveptr2;
int j;
if (argc != 4)
{
fprintf(stderr, "Usage: %s string delim subdelim\n", argv[0]);
exit(EXIT_FAILURE);
}
for (j = 1, str1 = argv[1]; ; j++, str1 = NULL)
{
token = strtok(str1, argv[2]);
if(token == NULL)
break;
printf("%d: %s\n", j, token);
for(str2 = token; ; str2 = NULL)
{
subtoken = strtok(str2, argv[3]);
if (subtoken == NULL)
break;
printf(" --> %s\n", subtoken);
}
}
exit(EXIT_SUCCESS);
return 0;
}
输出结果:
1:a/bbb////ccc
--> a
--> bbb
--> ccc
没有达到预想的结果
strtok_r代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *str1, *str2, *token, *subtoken;
char *saveptr1, *saveptr2;
int j;
if (argc != 4)
{
fprintf(stderr, "Usage: %s string delim subdelim\n", argv[0]);
exit(EXIT_FAILURE);
}
for (j = 1, str1 = argv[1]; ; j++, str1 = NULL)
{
token = strtok_r(str1, argv[2], &saveptr1);
if(token == NULL)
break;
printf("%d: %s\n", j, token);
for(str2 = token; ; str2 = NULL)
{
subtoken = strtok_r(str2, argv[3], &saveptr2);
if (subtoken == NULL)
break;
printf(" --> %s\n", subtoken);
}
}
exit(EXIT_SUCCESS);
return 0;
}
运行结果:
1:a/bbb////ccc
--> a
--> bbb
--> ccc
2:xxx--> xxx
3: yyy
--> yyy
和预想的结果吻和。我们可以看到在strtok_r函数中多了一个形参saveptr,这个形参替换了strtok中的静态变量,用来存储系一个解析的存储单元地址。
- strtok()函数与strtok_r()函数
- strtok()与strtok_r()函数
- strtok与strtok_r函数应用
- strtok和strtok_r函数
- 字符串切分函数:strtok与strtok_r
- STRTOK函数和STRTOK_R函数
- STRTOK函数和STRTOK_R函数
- strtok函数和strtok_r函数
- STRTOK函数和STRTOK_R函数
- strtok函数和strtok_r函数
- strtok函数和strtok_r函数
- STRTOK函数和STRTOK_R函数
- strtok函数和strtok_r函数
- c函数: strtok 和 strtok_r
- c函数: strtok 和 strtok_r
- strtok()和strtok_r() 函数解析
- c函数: strtok和strtok_r
- strtok、strtok_r 字符串分割函数
- Android原理揭秘系列之View、ViewGroup
- 浮躁~~~
- 【学习】Web应用程序分层设计的要点浅析
- 一起来学信息安全知识(1)——一个小故事的大道理
- windows名字解析之二 — 使用NetBIOS协议(动态映射)
- strtok()函数与strtok_r()函数
- 毕业后的日子一直在工作和睡觉中重复,看到这篇文章突然醒悟生活不能在这样的重复中渐渐失去色彩~(转帖)
- About Exception
- 处理内存警告的总结
- Win32汇编——过程控制(进程调试和进程隐藏)
- 二、变量
- 【转载】java输入流转为文件 InputStreamToFile 以及 byte[]和InputStream的相互转换
- Command模式的迷惑
- 帖一个PageRank算法的程序