C语言:strtok函数小结
2014-02-10 12:08
489 查看
C语言:strtok函数小结
前几天第一次用strtok函数来分割字符串,看了一些该函数的示例,有一些困惑。为什么第一次传入的数组名,第二次传入NULL。经过摸索后,终于明白strtok函数是怎么个用法了。
个人觉得,主要原因是strtok函数的源码中使用了static变量。本人找不到源码,于是自己写一个功能相同的函数,代码如下:
char *mystrtok( char *input,const char *str){
static char *move=NULL;
char *save_input;
int i,j,len;
if(input!=NULL)
move=input;
if(*move=='\0')
save_input=NULL;
else save_input=move;
len=strlen(str);
while(*move!='\0'){
for(i=0;i<len;i++){
if(str[i]==*move){
*move='\0';
move++;
return save_input;
}
}
move++;
}
return save_input;
}
顺带一提,strtok函数中的第二个参数是为分隔符字符串,该字符串中的所有字符(除了'\0'外)都将成为分隔符,并用'\0'来替换。举个例子:
strtok(input, "bd");中的第二个参数是"bd",则”bd"中的'b'、'd’都成为分隔符,当字符数组input中遇到'b'或者'd'时,就用'\0'来替换。该函数用一次,替换一次。
strtok函数的实现方式大致如下:
(1)当第一个参数不为NULL时,从输入的字符串的首地址开始查找分隔符,找到分隔符,替换成'\0',然后移动下一个字符,作为下一次的起始查找位置,最后返回本次查找的起始查找地址,因为第一次是从字符串的首地址开始,故第一次返回该字符串的首地址,如果第一次查找便找不到分隔符,则查找会停在字符串末尾的'\0'处,然后返回字符串的首地址。
(2)若第一个参数为NULL,则从上一次查找后停在的位置开始,继续查找,查找方式和(1)相同。所以,第一次用strtok函数时第一个参数不能为NULL,否则会由于内存不可读而报错。
(3)若某一次(除去第1次)查找开始时,第一个字符便是'\0',则返回NULL。
前几天第一次用strtok函数来分割字符串,看了一些该函数的示例,有一些困惑。为什么第一次传入的数组名,第二次传入NULL。经过摸索后,终于明白strtok函数是怎么个用法了。
个人觉得,主要原因是strtok函数的源码中使用了static变量。本人找不到源码,于是自己写一个功能相同的函数,代码如下:
char *mystrtok( char *input,const char *str){
static char *move=NULL;
char *save_input;
int i,j,len;
if(input!=NULL)
move=input;
if(*move=='\0')
save_input=NULL;
else save_input=move;
len=strlen(str);
while(*move!='\0'){
for(i=0;i<len;i++){
if(str[i]==*move){
*move='\0';
move++;
return save_input;
}
}
move++;
}
return save_input;
}
顺带一提,strtok函数中的第二个参数是为分隔符字符串,该字符串中的所有字符(除了'\0'外)都将成为分隔符,并用'\0'来替换。举个例子:
strtok(input, "bd");中的第二个参数是"bd",则”bd"中的'b'、'd’都成为分隔符,当字符数组input中遇到'b'或者'd'时,就用'\0'来替换。该函数用一次,替换一次。
strtok函数的实现方式大致如下:
(1)当第一个参数不为NULL时,从输入的字符串的首地址开始查找分隔符,找到分隔符,替换成'\0',然后移动下一个字符,作为下一次的起始查找位置,最后返回本次查找的起始查找地址,因为第一次是从字符串的首地址开始,故第一次返回该字符串的首地址,如果第一次查找便找不到分隔符,则查找会停在字符串末尾的'\0'处,然后返回字符串的首地址。
(2)若第一个参数为NULL,则从上一次查找后停在的位置开始,继续查找,查找方式和(1)相同。所以,第一次用strtok函数时第一个参数不能为NULL,否则会由于内存不可读而报错。
(3)若某一次(除去第1次)查找开始时,第一个字符便是'\0',则返回NULL。
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- asp Chr 函数 数字转字母的方法
- 探索PowerShell(十一)函数介绍
- vbscript LoadPicture函数使用方法与漏洞利用
- vbs 中调用shell.application 简单函数
- Asp函数介紹(37个常用函数)第1/2页
- phplib中的一些基本语法和函数
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- 探讨C语言的那些小秘密之断言
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- 基于C语言fflush()函数的使用详解
- 关于C语言除0引发的思考
- 深入分析C中不安全的sprintf与strcpy
- 探讨register关键字在c语言和c++中的差异