Chinaunix首页 | 论坛 | 博客
  • 博客访问: 140876
  • 博文数量: 33
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 365
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-10 09:26
文章分类

全部博文(33)

文章存档

2011年(1)

2010年(6)

2009年(26)

我的朋友

分类: C/C++

2010-08-24 11:14:28

void testStrtok(){
    char* dateTime2 = "2010-08-24 10:18:09";
    char dateTime[] = "2010-08-24 10:18:09";

    cout << strlen(dateTime) << " " << strlen(dateTime2) << endl;
    char* result = NULL;
    result = strtok(dateTime,"- :");
    while(result != NULL)
    {
        cout << result << endl;
        result = strtok(NULL,"- :");
    }
}


strtok的应用可参见:
主要的作用是将字符串str 按 字符delimiters划分成多个token;功能类似于java中的split,但是它是一个个的返回,不是返回链表。delimiters中可包含多个字符。划分后,str的内容将会改变。、

当给strtok传递参数dateTime2时,将收到SIGSEGV信号,表示非法的内存访问。而dateTime则不会。

究其原因,是因为dateTime2指向指向的是一串“字符串常量”。其值是不能改变的。如:dateTime2[2]='1'也将收到SIGSEGV的信号,同样的非法访问内存。而strtok函数正是需要修改其参数str的值:将分隔符处设置为NULL。

因此,出现了以上的非法内存访问。

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