strtok函数和strtok_r函数的简单实现
2013-10-23 20:35
375 查看
#include <stdio.h> #include <string.h> char *mystrtok(char *str, const char *delim) { char *s_begin, *s_end; static char *savep = ""; //"root:0::/root/bash:/usr/bin"; s_begin = (str != NULL) ? str : savep; s_begin += strspn(s_begin, delim); if(*s_begin == '\0'){ savep = ""; return NULL; } s_end = s_begin + strcspn(s_begin, delim); if(*s_end != '\0') *s_end++ = '\0'; savep = s_end; return s_begin; } int main(void) { char str[] = "root:0::/ root/ bash:/usr/bin", *token; token = mystrtok(str, ":"); printf("token:%s\n", token); while((token = mystrtok(NULL, ":"))) printf("token:%s\n", token); return 0; }
strtok_r函数实现
#include <stdio.h> #include <string.h> char *my_strtok_r(char *s, const char *delim, char **save_ptr) { char *token; if (s == NULL) s = *save_ptr; s += strspn(s, delim); if (*s == '\0') return NULL; token = s; s = strpbrk(token, delim); //查找字符串中第一个出现的指定字符 if (s == NULL) *save_ptr = strchr(token, '\0'); else { *s = '\0'; *save_ptr = s + 1; } return token; } int main(void) { char str[] = "root:0::/ root/ bash:/usr/bin", *token, *sp = NULL; printf(" %s\n", str); token = my_strtok_r(str, ":", &sp); printf("token:%s\n", token); while((token = my_strtok_r(NULL, ": ", &sp))) printf("token:%s\n", token); return 0; }
相关文章推荐
- ASP.NET中在不同的子域中共享Session
- 鼠标悬停、事件触发试用,及信号发送
- mysql相关语句笔记
- poj 2115 C Looooops His love for her is enshrined forever in his heart.扩展欧几里得
- 单击一个颜色名或者 16 进制值,就可以查看与不同文字颜色搭配的背景颜色。
- java.lang.NoClassDefFoundError
- Unity界面插件NGUI核心组件说明
- 结构体的内存分配
- 在ubuntu12.04上用qvfb运行QtE程序
- 在DirectX 中进行2D渲染
- 项目中用到了的一些批处理文件
- hdu-2044-一只小蜜蜂...
- 常用服务器模型总结
- 将Request.QueryString获得的值转换为INT
- android json解析及简单例子
- C++ 随机函数
- ALSA声卡驱动中的DAPM详解之二:widget-具备路径和电源管理信息的kcontrol
- 使用python进行加密解密AES算法
- dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid
- 指针高级