Chinaunix首页 | 论坛 | 博客
  • 博客访问: 791840
  • 博文数量: 131
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1349
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(131)

文章存档

2024年(2)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2010-01-06 10:21:42

我们来看一段代码

#include
#include
#include

int main ( void )
{
        char *token;
        char *line = "LINE TO BE SEPARATED";
        char *search = " ";

        /* Token will point to "LINE". */
        token = strtok(line, search);

        /* Token will point to "TO". */
//      token = strtok(NULL, search);
        return 0;
}

这段代码是从 linux 系统中通过 man strtok  得到的.

我们运行了一下

cc -o a a.c
./a

结果程序 code dump 了.

我们将上段程序放到 sco 上运行,程序可以正常通过,晕乎乎.

上述代码我们修改一下,

#include
#include
#include

int main ( void )
{
        char *token;
        char line[] = "LINE TO BE SEPARATED";
        char *search = " ";

        /* Token will point to "LINE". */
        token = strtok(line, search);

        /* Token will point to "TO". */
//      token = strtok(NULL, search);
        return 0;
}

程序可以正常通过.

我们观察发现 只是修改了 char *line 为 char line[] .

我们再来看看如下代码:

#include
#include
#include

int main ( void )
{
        char    s[]="1|2|3|4|||7";
        char    *p1=s;
        char    *p2;

        while( (p2 = strtok(p1,"|")) != NULL )
        {
                fprintf(stderr,"%s\n",p2);
                p1 = NULL ;
        }
        return 0;
}

这段代码可以正确执行,仔细思考一下其中的 s[] 和 *p1 = s 和第一段代码有什么不同,其实不过是对内存的分配上出现的问题,可能是不同的 C 编译器有所差异罢了.

^_^.


阅读(1381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~