strtok()思考

今天写一个比较函数,两个key前面相同,后面空格数目不同,不固定,所以写一个只比较空格前内容的函数,用strtok(),碰到一个知道但没想过的问题,记录下来。

 

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *ch1 = "abcdef";
    char *ch2 = "cd";
    char *ch3 = NULL;
    
    ch3 = strtok(ch1, ch2);
    
    return 0;
}

    这样编译是没问题的,但执行会段错误。因为strtok()的原型是char *strtok(char *cs, const char *ct),函数会改变cs的指向的内容,但ch1是字符串常量,在内存的静态区,是不可更改的,所以执行会但错误,给该成ch1[]会执行通过的,所以自己写函数,后来看linux函数库源码,发现linux已经将strtok删除了,变更为strsep()。

    以前自己写代码,会避免这些错误,指针参数如果会在函数中变更其执行的内容,不能传入const(编译报错)、字符串常量(执行段错误),但用库函数的时候,需要确定,可以通过注意看函数原型,库函数一般不变更的指针参数,会执行为const的。

posted on 2012-07-05 22:36  kevin_kang  阅读(178)  评论(0)    收藏  举报

导航