Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1698949
  • 博文数量: 163
  • 博客积分: 10591
  • 博客等级: 上将
  • 技术积分: 1980
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-08 18:17
文章分类

全部博文(163)

文章存档

2018年(1)

2012年(1)

2011年(47)

2010年(58)

2009年(21)

2008年(35)

分类: LINUX

2010-09-02 14:20:27

在编程过程中,有时需要对字符串进行分割.而有效使用这些字符串分隔函数将会给我们带来很多的便利.

下面我将在MSDN中学到的strtok函数做如下翻译.

  strtok :在一个字符串查找下一个符号

char *strtok( char *strToken, const char *strDelimit );

返回值:返回指向在strToken字符串找到的下一个符号的指针,当在字符串找不到符号时,将返回NULL.每次调用都通过用NULL字符替代在strToken字符串遇到的分隔符来修改strToken字符串.

参数:
strToken:包含符号的字符串

strDelimit:分隔符集合

注:第一次调用strtok函数时,这个函数将忽略间距分隔符并返回指向在strToken字符串找到的第一个符号的指针,该符号后以NULL字符结尾.通过调用一系列的strtok函数,更多的符号将从strToken字符串中分离出来.每次调用strtok函数时,都将通过在找到的符号后插入一个NULL字符来修改strToken字符串.为了读取strToken中的下一个符号,调用strtok函数时strToken参数为NULL,这会引发strtok函数在已修改过的strToken字符串查找下一个符号.

Example(摘自MSDN)

/* STRTOK.C: In this program, a loop uses strtok
 * to print all the tokens (separated by commas
 * or blanks) in the string named "string".
 */

#include
#include

char string[] = "A string\tof ,,tokens\nand some  more tokens";
char seps[]   = " ,\t\n";
char *token;

void main( void )
{
   printf( "%s\n\nTokens:\n", string );
   /* Establish string and get the first token: */
   token = strtok( string, seps );
   while( token != NULL )
   {
      /* While there are tokens in "string" */
      printf( " %s\n", token );
      /* Get next token: */
      token = strtok( NULL, seps );
   }
}


Output

A string   of ,,tokens
and some  more tokens

Tokens:
 A
 string
 of
 tokens
 and
 some
 more
 tokens

 
 
在unix中strtok函数使用需注意
 
虽然strtok的函数原型是
  extern char *strtok(char *s, char *delim);
       
  用法:#include
 
  功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。
 
  说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。
        strtok在s中查找包含在delim中的字符并用NULL('\0')来替换,直到找遍整个字符串。
        返回指向下一个标记串。当没有标记串时则返回空字符NULL。
但是如果是下面的用法,则是错误的:
    char *s="zgbfg|zlkjksajflasf";
    char * p1=strtok(s,"|");
理由是,s字符串指针指向的是一个常数字符串。
而strtok是需要分割字符,并相应的把传入的s进行裁剪,但是由于s指向的是个常数字符串,所以会导致出错。
如果是下面的用法则不会出错。
char  s[256]="zgbfg|zlkjksajflasf";
char * p1=strtok(s,"|");
这是s是个字符串数组,第一句话会将字符串赋值给s。而s这个时候是个局部的字符串变量,可以被strtok修改。
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lzyzuixin/archive/2009/11/20/4839866.aspx
 
阅读(1566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~