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) |