LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 815|回复: 1

strtok对数组做了什么

[复制链接]
发表于 2006-2-10 15:15:24 | 显示全部楼层 |阅读模式
如下程序找到被字符','或'.'间隔的字符串。
[php]
#include<string.h>
main ()
{
  char aa[] = ",,ab,,cd,ef.,n.,.,";
  int i;
  char *bb;

  for (i = 0; i < sizeof (aa); i++)
    printf ("%d,", aa);
  printf ("\naa=%s\n\n", aa);

  bb = strtok (aa, ",.");
  for (i = 0; i < sizeof (aa); i++)
    printf ("%d,", aa);
  printf ("\naa=%s\n", aa);
  printf ("bb=%s\n\n", bb);

  while ((bb = strtok (NULL, ",.")) != NULL)
    {
      for (i = 0; i < sizeof (aa); i++)
        printf ("%d,", aa);
      printf ("\naa=%s\n", aa);
      printf ("bb=%s\n", bb);
    }
}
[/php]
结果显示:
44,44,97,98,44,44,99,100,44,101,102,46,44,110,46,44,46,44,0,
aa=,,ab,,cd,ef.,n.,.,

44,44,97,98,0,44,99,100,44,101,102,46,44,110,46,44,46,44,0,
aa=,,ab
bb=ab

44,44,97,98,0,44,99,100,0,101,102,46,44,110,46,44,46,44,0,
aa=,,ab
bb=cd
44,44,97,98,0,44,99,100,0,101,102,0,44,110,46,44,46,44,0,
aa=,,ab
bb=ef
44,44,97,98,0,44,99,100,0,101,102,0,44,110,0,44,46,44,0,
aa=,,ab
bb=n
说明strtok对原数组aa进行了更改:
1.开头的','或'.'不改。
2.如果遇到连续的',.'串,只将第一个改为'\0'。
发表于 2006-2-10 19:08:38 | 显示全部楼层
strtok 本来就会对传入的字符数组进行修改, 一般介绍 ANSI C 标准库的书上都有提到.

在 Brian W. Kernighan and Rob Pike 的 The Practice of Programming 对次此有
专门的讨论
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表